Зависимости библиотек разрешаются, когда вы связываете свои объектные файлы вместе в исполняемый файл. Вы делаете это на этом шаге:
$(EXEC): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
Обычно ваша командная строка выглядит примерно так:
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
Я заменил $(CFLAGS)
здесь на $(LDFLAGS)
, потому что вы обычно хотите другой набор флагов для связывания вашего кода, чем для компиляции вашего кода.
Чтобы добавить ссылку в математическую библиотеку, вы должны добавить следующее в верхней части Makefile
:
LIBS = -lm -lpthread
Даю вам:
CC=gcc
CFLAGS= -g -pthread -std=gnu99
LIBS = -lm -lpthread
SRCS = main.c client.c
DEPS = client.h
EXEC = peer
OBJS= $(SRCS:.c=.o)
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
%.o: %.c $(DEPS)
$(CC) $(CFLAGS) -c $<
run: peer
./peer
clean:
rm $(OBJS)
rm peer
Шаг связывания будет выглядеть так:
gcc -o peer main.o client.o -lm -lpthread