子目录和Makefiles

我认为这是一个多次提出的问题,但我找不到正确的方法。

我有以下结构:

project/ project/Makefile project/code project/code/*.cc project/code/Makefile 

当我在目录“项目/代码”,并调用“make project_code”我的代码编译正确。

我想这样做,当我在“项目/”,只是调用“make project_code”,就好像我在“项目/代码”。

makefile'project / Makefile'将包含其他规则(比如“install”)和一些编译规则,就好像我在'project / code'中一样。 为此,我要求你的帮助…谢谢。

最简单的方法是做:

 CODE_DIR = code .PHONY: project_code project_code: $(MAKE) -C $(CODE_DIR) 

.PHONY规则意味着project_code不是需要.PHONY的文件, -C标志表示目录中的变化(相当于在调用make之前运行cd code )。 您可以使用相同的方法在code Makefile中调用其他目标。

例如:

 clean: $(MAKE) -C $(CODE_DIR) clean 

尝试把这个规则放在项目/ Makefile中,就像这样(对于GNU make):

 .PHONY:project_code
 project_code:
        cd代码&& make