c++ - 更改包含的 makefile 中的文件路径

标签 c++ makefile

我有项目和几个子项目

一些子项目是非常独立的。它们在对整个项目一无所知的情况下工作,它们的构建方式不同并且拥有自己的 Makefile。此 Makefile 位于子项目根目录中。 整个子项目构建为单个目标文件。

有什么方法可以将这样的目标文件正确地包含到主 Makefile 中吗? “正确地”是指保留所有依赖项并使用子项目 Makefile 中的方法构建此文件。

我试图创建用于构建此目标文件的规则:

path_to_subproject/some_object.o:
    $(MAKE) -C path_to_subproject

但那样我就无法保留任何依赖项。

我需要的是转换子项目 Makefile 中的所有相对路径并将其包含到主 Makefile 中。

另一种方法可能是告诉主 Makefile some_object.o 是使用不同的 Makefile 构建的,所以 make应该用它来检查依赖关系等。

最佳答案

假设 subproject/ 中的 makefile 如下所示:

some_object.o: some_source.cc some_header.h
    $(CXX) -c $< -o $@ -I.

你可以这样修改:

HERE:=/full/path/to/subproject

$(HERE)/some_object.o: $(HERE)/some_source.cc $(HERE)/some_header.h
    $(CXX) -c $< -o $@ -I$(HERE)

这将在单独使用时与原来的行为相同(除了你不能再从 subproject/ make some_object.o,你必须 make/full/path/to/subproject/some_object.o-- 可以修复,但您必须做出一两个设计决定)。

现在您可以在主联编文件的底部添加一行:

include path_to_subproject/Makefile

然后主 makefile 可以使用该对象:

some_executable: local_object.o /full/path/to/subproject/some_object.o
    whatever

一旦你有了这个工作,更复杂的变化是可能的。

关于c++ - 更改包含的 makefile 中的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25950059/

相关文章:

c - undefined reference 可能是 makefile 错误?

c++ - 无法使用 CMake 链接 GTest 中的类

c++ - 使文件问题 : always spits out "Nothing to be done for ` make. w'。”

python - 从 Makefile 中终止进程

c++ - 命名空间全局变量丢失值(C++)

c++ - opencv卡尔曼滤波多目标跟踪误差

c++ - 在 c++ Eclipse CDT 中使用不同的值构建

Linux 上的 C++ 开发 - 我从哪里开始?

c++ - 在 C++ 中从排序的整数 vector 中搜索和删除元素的最快方法

C++ 嵌套类访问