我正在使用automake构建应用程序的项目中工作。我们使用一个automake配置文件(Makefile.am)为多个平台构建应用程序。在这个Makefile.am中,平台特定的子自动配置文件(让我们将它们命名为Makefile.platform)包括如下:
include platform_A/Makefile.platform
include platform_B/Makefile.platform
...
include platform_X/Makefile.platform
我最近想要做的是修改Makefile.am以将其中一个平台分开,同时仍然使其适用于其他平台。我正试着在下面做
if PLATFORM_A
include platform_A/Makefile.platform
endif
include platform_B/Makefile.platform
...
include platform_X/Makefile.platform
但似乎“include”在if / endif被评估之前生效,这意味着,如果我删除“platform_A / Makefile.platform”,当我尝试为其他人构建应用程序时,automake将无法成功解析Makefile.am平台(例如platform_B& platfrom_X),因为它找不到“platform_A / Makefile.platform”。
这里有专家可以告诉我如何在automake配置文件中有条件地包含外部文件吗?这里的“有条件”意味着如果不满足条件,则根本不会包含(导入)外部文件。
非常感谢!
答案 0 :(得分:1)
取决于你的Makefile-snippets的功能,你可以逃脱:
if PLATFORM_A
-include platform_A/Makefile.platform
endif
在这种情况下,Makefile-snippets只是包含在内,而不是由automake解析。
另请注意,如果-include
d片段不存在,则不会生成错误(重要的部分是以-
为前缀的连字符(include
)
答案 1 :(得分:0)
我不知道如何做你想做的事。你可以翻转条件的位置来完成同样的事情:
<强> Makefile.am 强>
include platform_A/Makefile.platform
include platform_B/Makefile.platform
...
<强> platform_A / Makefile.platform 强>
if PLATFORM_A
...
endif
automake include directive的描述包括片段:
这种方式包含的Makefile片段总是分布式的,因为它们需要重建Makefile.in。
答案 2 :(得分:0)
我不能专门针对automake说话,但对于GNU make至少ifeq / etc。正确地控制makefile的条件包含。
$ more * | cat :::::::::::::: Makefile :::::::::::::: ifneq ($(ONE),) include one.mk endif include two.mk include both.mk all: ; :::::::::::::: both.mk :::::::::::::: $(warning both.mk) :::::::::::::: one.mk :::::::::::::: $(warning one.mk) :::::::::::::: two.mk :::::::::::::: $(warning two.mk)
$ make two.mk:1: two.mk both.mk:1: both.mk make: `all' is up to date.
$ make ONE=f one.mk:1: one.mk two.mk:1: two.mk both.mk:1: both.mk make: `all' is up to date.