我有项目和几个子项目
一些子项目是非常独立的。它们在对整个项目一无所知的情况下工作,它们的构建方式不同并且拥有自己的 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/