Как правильно добавить "-lm" (LDFLAGS) в этот Makefile? - PullRequest
0 голосов
/ 08 января 2019

У меня есть этот прекрасно работающий Makefile, но я не знаю, как добавить параметр "-lm". Я много чего нашел в stackoverflow, но эти примеры Makefiles выглядят совершенно иначе, чем мои.

Как мне добавить "-lm" к этому:

CC=gcc
CFLAGS= -g -pthread -std=gnu99
SRCS =  main.c client.c
DEPS = client.h

EXEC = peer

OBJS= $(SRCS:.c=.o)

all: $(EXEC)
$(EXEC): $(OBJS)
    $(CC) $(CFLAGS) -o $@  $^

%.o: %.c $(DEPS)
    gcc $(CFLAGS) -c $<

run: peer
    ./peer
clean:
    rm $(OBJS)
    rm peer

1 Ответ

0 голосов
/ 08 января 2019

Зависимости библиотек разрешаются, когда вы связываете свои объектные файлы вместе в исполняемый файл. Вы делаете это на этом шаге:

$(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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...