c - 如何将“-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
解决方案
当您将目标文件链接到可执行文件中时,库依赖关系得到解决。您在此步骤中执行此操作:
$(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
推荐阅读
- excel - 在 Excel 和 Word 中的 VBA 代码之间传递变量
- java - 如何使用预期的 DTO 测试控制器返回的 JSON?
- javascript - 我必须单击两次才能重新渲染我更新的状态并且回调函数不起作用
- docker - 通过Jenkins启动docker容器时出现Robotframework DatafileError
- algorithm - 如何建立基于间隔重复学习的网站?
- r - 传播数据以创建唯一的行
- mongodb - 如何解决 TypeError: collection.update(...) is not a function in mongodb?
- html - 如何在 html/css 中定位适合移动浏览器的图像
- facebook - 我是否需要使用 Facebook Audience 网络手动刷新横幅广告?
- c# - 从 API 请求中移除 Arrafinity Cookie