我有项目和很少的子项目
一些子项目非常独立。他们在不了解整个项目的情况下工作,他们的构建方式不同,并且有自己的Makefile
。此Makefile
位于子项目根目录中。
整个子项目是针对单个目标文件构建的。
有没有办法将此类目标文件正确包含在主Makefile
中?通过"正确"我的意思是保留所有依赖项并使用子项目Makefile
中的方法构建此文件。
我尝试创建用于构建此目标文件的规则:
path_to_subproject/some_object.o:
$(MAKE) -C path_to_subproject
但是这样我就无法保留任何依赖关系。
我需要的是转换子项目Makefile
中的所有相对路径并将其包含在主Makefile
中。
另一种方法可能是告诉主Makefile
some_object.o
是使用不同的Makefile
构建的,因此make
应该使用它来检查依赖关系等。
答案 0 :(得分:1)
假设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)
当它本身使用时,它的行为与原始版本相同(除了你make some_object.o
subproject/
以外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
然后master makefile可以使用该对象:
{{1}}
一旦你有了这个工作,就可以有更复杂的变化。