gpt4 book ai didi

c++ - 如何编译多个子目录下的所有cpp文件?

转载 作者:行者123 更新时间:2023-11-28 01:42:44 27 4
gpt4 key购买 nike

目前,我有一个 makefile 设置,我将所有 cpp 文件编译到一个目录 src 中。结构如下

CCPP = g++
CPPFLAGS = -std=c++11
CPPLINK = -lstdc++
INC_DIR = include

CPP_FILES := $(wildcard src/*.cpp)
OBJ_FILES := $(addprefix lib/,$(notdir $(CPP_FILES:.cpp=.o)))
LD_FLAGS :=
CC_FLAGS := -c $(CPPFLAGS) -Wall -I$(INC_DIR)

bin/Xenon: $(OBJ_FILES) ; $(CCPP) $(LD_FLAGS) -o $@ $^

lib/%.o: src/%.cpp ; $(CCPP) $(CC_FLAGS) -c -o $@ $<

不过这样虽然行得通,但是我想把src分成多个cpp文件的子目录。

如何让这个解决方案适用于单个 src 文件夹下的任意数量的子目录?

注意:这里 bin/Xenon 是一个带有 main 方法的 CLI 应用程序可执行文件,INC_DIR 是我所有头文件所在的位置。这也在 OSX 上,而不是 Windows。

最佳答案

简单的部分是

CPP_FILES := $(wildcard src/*/*.cpp)   # if all are in subdirectories
CPP_FILES := $(wildcard src/*.cpp src/*/*.cpp)
OBJ_FILES := $(patsubst src/%,lib/%,$(CPP_FILES:.cpp=.o))

如果您可能在多个目录中具有相同的文件名,则您不需要 $(notdir)

您还需要担心制作lib 的相应子目录。最简单的做法可能是在写入时确保每个都存在:

lib/%.o: src/%.cpp
mkdir -p $(dir $@)
$(CCPP) $(CC_FLAGS) -c -o $@ $<

关于c++ - 如何编译多个子目录下的所有cpp文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46518106/

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