2014-09-20 130 views
0

我有项目和很少的子项目更改包含的生成文件中的文件路径

某些子项目非常独立。他们在没有任何关于整个项目的知识的情况下工作,他们的构建方式不同,并拥有自己的Makefile。这Makefile位于子项目根目录。整个子项目构建为单个对象文件。

有没有什么办法可以正确包含这样的目标文件到主要的Makefile? “正确”我的意思是保留所有依赖关系,并在子项目Makefile中使用方法构建此文件。

我试图建立这个目标文件创建规则:

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

但这样我可以不保存任何依赖关系。

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

另一种方式可以告诉主Makefilesome_object.o使用不同Makefile建,所以make应该用它来检查的依赖等

+0

你可以修改子项目的makefile吗? – Beta 2014-09-20 23:02:19

+0

@贝塔是的,我可以 – Ari 2014-09-21 12:55:52

回答

1

假设在subproject/ makefile文件看起来是这样的:

some_object.o: some_source.cc some_header.h 
    $(CXX) -c $< -o [email protected] -I. 

你可以像这样修改它:

HERE:=/full/path/to/subproject 

$(HERE)/some_object.o: $(HERE)/some_source.cc $(HERE)/some_header.h 
    $(CXX) -c $< -o [email protected] -I$(HERE) 

这将行事s (除了您不能再make some_object.osubproject/,您必须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 

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