我有这个运行良好的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
答案 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