首页 > 解决方案 > 如何将“-lm”(LDFLAGS)正确添加到此 Makefile?

问题描述

我有这个完美运行的 Makefile,但我不知道如何添加“-lm”参数。我在 stackoverflow 上发现了很多,但这些示例 Makefile 看起来与我的完全不同。

我应该如何在其中添加“-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

标签: cubuntugccmakefile

解决方案


当您将目标文件链接到可执行文件中时,库依赖关系得到解决。您在此步骤中执行此操作:

$(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

推荐阅读