我有一个带有几个项目的dirs结构。有些项目依赖于其他项目,而这些项目又可能依赖于其他项目。
Dir
+-Proj1
| +-Debug
| | makefile
| +-Release
| makefile
| <sources>
+-Proj2
| +-Debug
| | makefile
| +-Release
| makefile
| <sources>
...
makefile
自动生成(由Eclipse CDT),所以我无法更改它,因为如果项目发生一些变化,我的更改将会消失。
现在,每个项目都必须在相应的Debug
或Release
dirs中构建。每个makefile
s都有一个亲戚指的是我需要在Debug
或Release
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的来源。
有人有想法吗?