我正在尝试在我的项目中创建一个子目录(让我们称之为$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 ...)
。 ; - )
有没有更简洁的方法来实现这一目标?
答案 0 :(得分:5)
制定规则以构建Makefile.inc
。 (make
会在分析Makefile.inc
行时抱怨include
不存在,但会继续解析主makefile,应用任何规则来构建包含的文件,include Makefile.inc
Makefile.inc:
ln ../Makefile.inc $@
3}}包含文件。)
{{1}}