automake环境变量条件

时间:2013-01-27 23:06:37

标签: makefile conditional environment-variables autotools automake

我有一个文件Makefile.am我用来生成一个Makefile。在生成的Makefile中,我希望有类似的内容:

ifndef SOURCECODEPATH
   SOURCECODEPATH := /home/root/source_code_path
endif

看起来很简单,有谁知道我怎么做?

5 个答案:

答案 0 :(得分:3)

使用configure.ac中的AM_CONDITIONAL宏。

脚本设置您可以测试的变量,例如,如果条件已启用,则设置为非空的变量:AM_CONDITIONAL([ENABLE_SOURCECODEPATH], [test "x$ac_srcpath" != "x"])

然后在Makefile.am

if !ENABLE_SOURCECODEPATH
SOURCECODEPATH = ...
endif

但是,由于您明确定义了变量(如果未定义),您应该在configure.ac中定义它,无论使用AC_SUBST(SRCPATH, $ac_srcpath)

SOURCECODEPATH = @SRCPATH@ # or $(SRCPATH)

答案 1 :(得分:3)

你可以简单地使用Makefile.am包含的辅助makefile(它的扩展)。

Makefile.am:

#...
include Makefile.env
#...

和Makefile.env:

ifndef SOURCECODEPATH
   SOURCECODEPATH := /home/root/source_code_path
endif

automake不会触及(或尝试解析)include d Makefile.env

答案 2 :(得分:0)

以下解决方案至少应该适用于GNU Make和BSD Make。 Brett Hale的autotools solution应该可以在任何地方使用,但它要复杂得多。

SOURCECODEPATH?=/home/root/source_code_path

答案 3 :(得分:0)

你真的不应该使用automake来生成非可移植的makefile,但是如果你真的想这样做来生成一个用于GNU make的Makefile那么你可以在endif之前添加一个空格:< / p>

ifndef SOURCECODEPATH
   SOURCECODEPATH := /home/root/source_code_path
 endif

如果e不在第一列中,Automake将不会尝试将endif解析为automake条件的结尾,而是将文本逐字复制到Makefile。 GNU-make将识别空间的条件(至少3.80可以识别它。我没有尝试过任何其他的。)

答案 4 :(得分:0)

实际上,正如http://www.gnu.org/software/make/manual/make.html#Flavors所述,?=用于使用=声明的变量。如果需要为使用:=声明的变量设置默认值,请使用如下构造:

ifeq ($(origin SOURCECODEPATH), undefined)
  SOURCECODEPATH := /home/root/source_code_path
endif