Не могу разобраться с подключением библиотеки CS50 на gcc

Всем привет. Потихоньку прохожу курс CS50. Сижу на Windows 10 через VSCode с WSL Ubuntu. При компиляции программы с функцией get_int с помощью gcc выдает:

gcc -lcs50 -Wall -Wextra -Werror -c main.c -o main.o
gcc -lcs50 -Wall -Wextra -Werror -o main main.o
/usr/bin/ld: main.o: in function `main':
main.c:(.text+0xdd): undefined reference to `get_int'
collect2: error: ld returned 1 exit status
make: *** [makefile:13: main] Error 1

Библиотеку устанавливал командами:

$ curl -s https://packagecloud.io/install/repositories/cs50/repo/script.deb.sh | sudo bash
$ sudo apt-get install libcs50

Вот Makefile

SRCS = main.c
OBJS = $(SRCS:.c=.o)
CFLAGS = -lcs50 -Wall -Wextra -Werror
TARGET = main
CC = gcc

all: $(TARGET)

.c.o:
        $(CC) $(CFLAGS) -c $< -o $@

$(TARGET): $(OBJS)
        $(CC) $(CFLAGS) -o $(TARGET) $(OBJS)

clean:
        rm -rf ./*.o

fclean:
        rm -rf $(TARGET) *.o

re: fclean all

Если компилировать через clang, ошибок нет, и программа запускается нормально. Но с clang другая беда, при компиляции через makefile выдает:

clang -lcs50 -Wall -Wextra -Werror -c main.c -o main.o
clang: error: -lcs50: 'linker' input unused [-Werror,-Wunused-command-line-argument]
make: *** [makefile:10: main.o] Error 1

Если убрать флаг -lcs50 или изменить компилятор на gcc в строке:

.c.o:
        $(CC) $(CFLAGS) -c $< -o $@

программа нормально компилируется и запускается. Объясните пожалуйста, в чем проблема с gcc, и почему clang не компилирует объектные файлы с флагом -lcs50

Вот с таким makefile все работает:

SRCS = main.c
OBJS = $(SRCS:.c=.o)
CFLAGS = -lcs50 -Wall -Wextra -Werror
TARGET = main
CC = clang

all: $(TARGET)

.c.o:
        $(CC) -Wall -Wextra -Werror -c $< -o $@

$(TARGET): $(OBJS)
        $(CC) $(CFLAGS) -o $(TARGET) $(OBJS)

clean:
        rm -rf ./*.o

fclean:
        rm -rf $(TARGET) *.o

re: fclean all

Еще вопрос, нужны ли вообще флаги при создании объектных файлов:

.c.o:
        $(CC) -Wall -Wextra -Werror -c $< -o $@

Учиться только начинаю, поэтому если проблема глупая, заранее прошу прощения.


Ответы (1 шт):

Автор решения: Александр Зборовский

Вопрос решен после настройки Makefile:

SRCS = main.c sigma-1.c swap.c
OBJS = $(SRCS:.c=.o)
CFLAGS = -Wall -Wextra -Werror
LDLIBS = -lcs50 -lm
TARGET = main
CC = gcc

all: $(TARGET)

.c.o:
        $(CC) $(CFLAGS) -c $< -o $@

$(TARGET): $(OBJS)
        $(CC) -o $(TARGET) $(OBJS) $(LDLIBS)

clean:
        rm -rf ./*.o

fclean:
        rm -rf $(TARGET) *.o

re: fclean all

Спасибо @StanislavVolodarskiy

→ Ссылка