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

时间:2011-07-16 08:11:57

标签: 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

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

有没有更简洁的方法来实现这一目标?

1 个答案:

答案 0 :(得分:5)

制定规则以构建Makefile.inc。 (make会在分析Makefile.inc行时抱怨include不存在,但会继续解析主makefile,应用任何规则来构建包含的文件,include Makefile.inc Makefile.inc: ln ../Makefile.inc $@ 3}}包含文件。)

{{1}}