使用automake/autoconf的Makefile条件
有没有人能告诉我,是否可以在Makefile.am中插入一个条件块,这样它就能被后续由autotools创建的Makefile使用?
这里有个例子:
ifeq "$(SOMEVAR)" ""
SOMEVAR="default_value"
endif
这看起来是Makefile中处理条件的常见方式。但是,Automake会把endif这一行去掉,最终导致make失败,并出现这样的提示信息:
Makefile:390: * 缺少 `endif'。停止。
大家有什么想法吗?
2 个回答
我想分享一个我偶然发现的另一种方法,来源于这个链接:有没有办法让automake不解析automakefile的一部分?。不过不幸的是,这个方法在使用ifeq .. else .. endif
这种条件语句时并不奏效。
因为这个问题也和Autoconf有关,我建议把条件放在configure.ac里,如果可以的话。可以像这样:
AM_CONDITIONAL([CONDITION_NAME], [test x"${SOMEVAR}" != x])
然后,你的Makefile.am里会包含:
if CONDITION_NAME
<conditional code>
else
<else :)>
endif
更新
这个问题和
python setup.py --root=$(DESTDIR) --prefix=$(DESTDIR)$(prefix)
从某个地方被调用有关。如果DESTDIR
是空的,前缀可能会变成一个相对路径,这样就不太对了。你已经确认它是从你的Makefile.am里被调用的。那么你可以做两件事。
把上面的命令改成
python setup.py --root=${DESTDIR}/// --prefix=${DESTDIR}///$(prefix)
。这里用三个斜杠可能是必要的,因为据我所知,POSIX规定两个斜杠有特殊含义,但三个或更多的连续斜杠就没有这个限制了。把上面的命令改成
DESTDIR=${DESTDIR:-///} && python setup.py --root=${DESTDIR} --prefix=${DESTDIR}$(prefix)
值得注意的是,依我个人的理解,这些操作其实都不应该是必要的。因为最初调用configure
的人已经能够准确指定他想用的prefix
。如果没有指定,Autoconf默认会使用一个绝对路径(/usr/local
)。所以,我想我不太明白你为什么会遇到这个问题。