从子目录调用makefile

时间:2016-04-08 08:58:48

标签: recursion makefile

我有一个带有几个项目的dirs结构。有些项目依赖于其他项目,而这些项目又可能依赖于其他项目。

Dir
+-Proj1
| +-Debug
| |  makefile
| +-Release
|    makefile
|  <sources>
+-Proj2
| +-Debug
| |  makefile
| +-Release
|    makefile
|  <sources>
...

makefile自动生成(由Eclipse CDT),所以我无法更改它,因为如果项目发生一些变化,我的更改将会消失。

现在,每个项目都必须在相应的DebugRelease dirs中构建。每个makefile s都有一个亲戚指的是我需要在DebugRelease dirs中构建每个项目的原因。

Eclipse生成的makefile包含了包含用户makefile的可能性。我使用此功能来导致其他人之前依赖的make构建项目。假设Proj1依赖于Proj2。然后我为Proj1的结果文件添加了对../../Proj2/<Debug or Release>/proj2.so的依赖,并为Proj1添加了这个规则:

$(USER_DEPS):                                  # (*)
    $(MAKE) -C "$(dir $@)" all

此处USER_DEPS包含此项目所依赖的文件列表。例如

USER_DEPS:=../../Proj2/Debug/proj2.so \
../../Proj3/Debug/proj3.so

所有这一切都有效,直到我在Proj2中更改了某些内容。现在,如果我为Proj1运行make,它会看到../../Proj2/Debug/proj2.so在这里,但它没有看到它不是实际的。可能只需要将Proj2的makefile包含到Proj1中,而不是编写标有(*)的规则,但Proj2的makefile包含亲属对其来源的引用。即如果我尝试将它们包含在Proj1中,make将尝试在Proj1的目录中找到Proj2的来源。

有人有想法吗?

0 个答案:

没有答案