如何将“ -lm”(LDFLAGS)正确添加到此Makefile?

时间:2019-01-07 22:23:29

标签: c ubuntu gcc 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

1 个答案:

答案 0 :(得分:2)

将对象文件链接到可执行文件时,可以解决库依赖关系。您正在此步骤中执行此操作:

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