带有 automake/autoconf 条件的 Makefile

aut*_*fer 5 python automake autoconf conditional

谁能告诉我是否有办法向 Makefile.am 插入条件块,以便将其进一步传递给由 autotools 创建的 Makfile?

下面是一个例子:

ifeq "$(SOMEVAR)" ""
SOMEVAR="default_value"
endif
Run Code Online (Sandbox Code Playgroud)

这似乎是做有条件的事情的常见 Makefile 方式。Automake 切断 endif 行并最终失败并显示如下消息:

Makefile:390: *缺少‘endif’。停止。

有什么想法吗?

den*_*ane 5

由于它也被标记为 Autoconf,因此如果可能的话,我建议将条件放入 configure.ac 中。类似于这样:

AM_CONDITIONAL([CONDITION_NAME], [test x"${SOMEVAR}" != x])
Run Code Online (Sandbox Code Playgroud)

然后,你的 Makefile.am 将包含

if CONDITION_NAME
<conditional code>
else
<else :)>
endif
Run Code Online (Sandbox Code Playgroud)

更新

问题与

python setup.py --root=$(DESTDIR) --prefix=$(DESTDIR)$(prefix)
Run Code Online (Sandbox Code Playgroud)

被从某处呼叫。如果DESTDIR为空,则前缀可能会扩展为相对路径,这不是您想要的。您已确认它是从您的 Makefile.am 中调用的。然后你可以做两件事。

  1. 将上面的命令改为python setup.py --root=${DESTDIR}/// --prefix=${DESTDIR}///$(prefix). 三斜杠可能是必要的,因为 AFAIK,POSIX 允许双斜杠具有特殊含义,但不允许三个或更多连续斜杠。

  2. 将上面的命令改为DESTDIR=${DESTDIR:-///} && python setup.py --root=${DESTDIR} --prefix=${DESTDIR}$(prefix)

值得注意的是,根据我的观点和对整个情况的有限理解,这些都不是必要的。因为最初的调用者configure能够准确地指定prefix他真正想要使用的。如果未指定,Autoconf 已默认为绝对路径 ( /usr/local)。所以,我想,我不太明白为什么你会遇到问题。

  • 很多毫无意义的解决方法,但是有没有办法让 automake 将常规的 if/else/endif 发送到 makefile 中? (2认同)