谁能告诉我是否有办法向 Makefile.am 插入条件块,以便将其进一步传递给由 autotools 创建的 Makfile?
这是一个例子:
ifeq "$(SOMEVAR)" ""
SOMEVAR="default_value"
endif
这似乎是 Makefile 做有条件的事情的常用方法。Automake 会切断 endif 行并最终导致失败,并显示如下消息:
Makefile:390: *缺少 `endif'。停止。
有什么想法吗?
谁能告诉我是否有办法向 Makefile.am 插入条件块,以便将其进一步传递给由 autotools 创建的 Makfile?
这是一个例子:
ifeq "$(SOMEVAR)" ""
SOMEVAR="default_value"
endif
这似乎是 Makefile 做有条件的事情的常用方法。Automake 会切断 endif 行并最终导致失败,并显示如下消息:
Makefile:390: *缺少 `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)
. 三斜线可能是必要的,因为 AFAIK,POSIX 允许双斜线具有特殊含义,但不允许三个或更多连续斜线。
把上面的命令改成DESTDIR=${DESTDIR:-///} && python setup.py --root=${DESTDIR} --prefix=${DESTDIR}$(prefix)
值得注意的是,在我看来,以及对整体情况的有限理解,这些都不是必需的。由于最初的调用者configure
能够准确地指定prefix
他真正想要使用的。如果没有指定,Autoconf 已经默认为绝对路径 ( /usr/local
)。所以,我想,我不太明白你为什么会遇到问题。
我提出了另一种我偶然发现的方法 Is there a way to tell automake not to translate part of the automakefile? . 但不幸的是,它不适用于ifeq .. else .. endif
条件。