gpt4 book ai didi

makefile - gmake 编译目录中的所有文件

转载 作者:行者123 更新时间:2023-12-02 16:09:36 24 4
gpt4 key购买 nike

我们有一些 C++ 代码,需要在其中创建 make 文件。每个 .h 和 .C 对创建一个对象,然后将一些对象链接在一起以形成可执行文件。相当标准的东西。

这个非 gnu make 命令只是将所有文件构建到目录中的对象

%.o:%.C
$(CC) $(CPFLAGS) -c $<

它的作用是为每个 %.C 文件(即每个 .C 文件)构建一个相应的 .o 文件。

有人知道如何用 gmake 做到这一点吗?

干杯

标记

最佳答案

您所展示的语法在 GNU make 术语中称为模式规则,它构成了您的解决方案的基石。您所需要的只是添加一种动态获取 .C 文件列表的方法。其他人已经展示了使用 $(shell) 来执行此操作的解决方案,但这毫无必要地低效。我建议您改用 $(wildcard),这是一个专门为此目的而设计的 GNU make 内置函数:

SRCS = $(wildcard *.C)
OBJS = $(patsubst %.C,%.o,$(SRCS))
foo: $(OBJS)
$(CC) -o $@ $^

%.o: %.C
$(CC) $(CPFLAGS) -c $<

如果您正在寻找更简洁的内容,以下内容也可以:

foo: $(patsubst %.C,%.o,$(wildcard *.C))

这只是消除了变量并利用了 GNU make 提供默认 %.o: %.C 模式规则以及将可执行文件从对象集。就我个人而言,我会使用更详细的版本,因为我发现它更容易阅读和维护,但每个版本都有自己的特点。

希望有帮助,

埃里克·梅尔斯基

关于makefile - gmake 编译目录中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1344829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com