我有一个文件Makefile.am我用来生成一个Makefile。在生成的Makefile中,我希望有类似的内容:
ifndef SOURCECODEPATH
SOURCECODEPATH := /home/root/source_code_path
endif
看起来很简单,有谁知道我怎么做?
答案 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