更改包含的makefile中的文件路径

时间:2014-09-20 14:59:11

标签: 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应该使用它来检查依赖关系等。

1 个答案:

答案 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}}

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