如何在包含组件Makefile之前运行命令?

mpo*_*llo 4 makefile gnu-make

我正在尝试在我的项目中创建一个子目录(让我们称之为$PROJECT/child),它需要../Makefile.inc从其父项中提取Makefile(让我们称之为)$PROJECT/Makefile.inc.后来我想复制$PROJECT/child到其他地方,以便它可以独立运行$PROJECT.

有一个共同的Makefile需要包含在两个项目中并在复制子目录时发货,我希望它包含在两种情况中.所以我想我会在child构建过程中链接它,如果找不到的话.(我不想只是包含../Makefile.inc,因为当我复制项目时,这将消失,我不希望调用构建系统负责将其Makefile.inc放置到位.)

有了这些限制,这是一个可怕的黑客攻击,我已经想到这样做,在$PROJECT/child/Makefile:

HACK = $(shell test -f Makefile.inc || ln -f  ../Makefile.inc .)
include $(HACK)Makefile.inc
Run Code Online (Sandbox Code Playgroud)

注意第二个命令上的额外特殊管道胶带.我必须实际包括,$(HACK)即使它最终$(shell ...)会变空,以便评估.;-)

是否有更清洁的方法来实现这一目标?

Gil*_*il' 5

给出一个规则来构建Makefile.inc.(make会抱怨Makefile.inc它在分析include行时不存在,但它将继续解析主makefile,应用任何规则来构建包含的文件,然后返回并使用包含的文件重新解析主makefile.)

include Makefile.inc
Makefile.inc:
        ln ../Makefile.inc $@
Run Code Online (Sandbox Code Playgroud)