gpt4 book ai didi

c++ - 如何拥有带有子文件夹的通用 make 文件?

转载 作者:搜寻专家 更新时间:2023-10-31 00:31:03 24 4
gpt4 key购买 nike

肯定这个问题已经被问过很多次了,但是我找不到合适的答案所以我才问。

我有以下项目结构:

/root
| obj
| Makefile
| src/
| | dir1/
| | | 1.cpp
| | dir2/
| | | 2.cpp
| | | dir3/
| | | | 3.cpp
| | | | 4.cpp
| | main.cpp

我可以有一个通用的 makefile 来编译 src 文件夹中任意深度的任意子文件夹中的所有 cpp 文件吗? 并将目标文件生成到 obj 目录中?

注意这个项目是使用 Eclipse CDT 开发的,我现在希望能够提供源代码而不需要用户安装 Eclipse 来构建它

最佳答案

要实现“无限”递归,您可以使用具有扩展模式的通配符:

CPPFILES := $(wildcard src/**/*.cpp)

然后您可以将它们转换为 .o 文件列表:

OBJFILES := $(patsubst src/%.cpp,obj/%.o,$(CPPFILES))

现在我们有了构建目标:

.PHONY: all
all: $(OBJFILES)

编译规则:

obj/%.o: src/%.cpp
mkdir -p "$(@D)"
$(CC) -c $< -o $@

如果带有扩展模式的通配符不起作用,那么您可以使用:

CPPFILES := $(shell find src -name '*.cpp')

关于c++ - 如何拥有带有子文件夹的通用 make 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35016128/

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