3

我有一个文件 Makefile.am 我用来生成一个 Makefile。在生成的 Makefile 中,我想要类似的东西:

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

看起来很简单,有人知道我该怎么做吗?

4

5 回答 5

6

使用AM_CONDITIONALconfigure.ac

该脚本设置了一个您可以测试的变量,例如,如果启用了条件,则该变量设置为非空: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)
于 2013-01-28T00:37:31.330 回答
4

您可以简单地使用 Makefile.am 包含的辅助生成文件(以及它的扩展)。

生成文件.am:

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

和 Makefile.env:

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

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

于 2013-01-29T15:48:50.143 回答
0

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

ifeq ($(origin SOURCECODEPATH), undefined)
  SOURCECODEPATH := /home/root/source_code_path
endif
于 2013-01-29T18:31:21.313 回答
0

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

SOURCECODEPATH?=/home/root/source_code_path
于 2013-01-28T16:54:51.427 回答
0

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

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

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

于 2013-01-28T19:04:35.200 回答