【发布时间】:2021-12-09 10:16:09
【问题描述】:
我正在创建自定义 Makefile 来构建 C++ Linux 应用程序。我的 cpp 源文件位于与 Makefile 相同级别的名为 src 的文件夹中。到目前为止,我已经能够使用以下内容构建我的目标文件:
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp | $(OBJ_DIR)
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
现在我的项目开始变得有点复杂,我想要 src 中的子目录,例如 src/common ,而且,不是每个文件都是 cpp 文件现在也是一个 c 文件。
我想每个子目录都有一个单独的 Makefile 是最好的方法,但我现在只用一个 Makefile 来保持这个简单。
我尝试了以下但不起作用
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(SRC_DIR)/common/%.cpp $(SRC_DIR)/common/%.c | $(OBJ_DIR)
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
我可以让 Makefile 执行 shell find 来查找所有 cpp 和 c 文件,但也试图避免这种情况。
如果有任何建议,我将不胜感激。
【问题讨论】:
-
“更简单”的解决方案通常是嵌套的 makefile。许多较小的文件仍然比一个庞然大物的文件更容易管理。但我会更进一步说,忘记这一点,改用 cmake 或 meson 之类的构建系统。
-
this 的变体在我的经验中也很有效。
标签: c++ linux gcc makefile g++