使用 automake/autoconf 条件生成文件

2022-01-21 00:00:00 python conditional autoconf automake

问题描述

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

can anybody tell me if there is a way to insert a conditional block to Makefile.am so that it will be passed further to a Makfile created by autotools?

这是一个例子:

ifeq "$(SOMEVAR)" ""
SOMEVAR="default_value"
endif

这似乎是 Makefile 做有条件的事情的常用方法.Automake 会切断 endif 行并最终导致失败,并显示如下消息:

This seems to be a usual Makefile way of doing conditional things. Automake cuts endif line off and make fails eventually with a message like this:

Makefile:390: * 缺少 `endif'.停下来.

Makefile:390: * missing `endif'. Stop.

有什么想法吗?


解决方案

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

Since it's tagged as Autoconf also, I suggest putting the condition in configure.ac, if that is possible. Similar to so:

AM_CONDITIONAL([CONDITION_NAME], [test x"${SOMEVAR}" != x])

然后,您的 Makefile.am 将包含

Then, your Makefile.am would contain

if CONDITION_NAME
<conditional code>
else
<else :)>
endif

更新

问题与

python setup.py --root=$(DESTDIR) --prefix=$(DESTDIR)$(prefix)

从某个地方被调用.如果 DESTDIR 为空,则前缀可能会扩展为相对路径,这不是您想要的.您已确认它是从您的 Makefile.am 调用的.那么你可以做两件事.

being called from somewhere. If DESTDIR is empty, the prefix may expand to a relative path, which is not what you want. You have confirmed it is being called from your Makefile.am. Then there's two things you can do.

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

  1. Change the above command to python setup.py --root=${DESTDIR}/// --prefix=${DESTDIR}///$(prefix). Triple slashes may be necessary since, AFAIK, POSIX allows for double slashes to have a special meaning, but not for three or more consecutive slashes.

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

值得注意的是,在我看来,以及对整体情况的有限理解,这些都不是必需的.由于 configure 的原始调用者能够准确指定他真正想要使用的 prefix.如果没有指定,Autoconf 已经默认为绝对路径 (/usr/local).所以,我想,我不太明白你为什么会遇到你的问题.

It may be noteworthy that, in my opinion and limited understanding of the whole picture, none of that should be necessary. Since the original caller of configure was able to specify exactly which prefix he really wanted to use. If none is specified, Autoconf already defaults to an absolute path (/usr/local). So, I guess, I don't quite understand why you run into your problem.

相关文章