【问题标题】:Makefile conditional with automake/autoconf使用 automake/autoconf 条件生成文件
【发布时间】:2011-05-14 11:38:34
【问题描述】:

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

这是一个例子:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: python conditional autoconf automake


    【解决方案1】:

    由于它也被标记为 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 调用的。那么你可以做两件事。

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

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

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

    【讨论】:

    • 谢谢!这是为了配置。我说的是make期间的条件块(取决于环境设置)。例如,如果你运行 make 安装在不同的位置,像这样:“DESTDIR=/some/rpm/builds make install”,那么 Makefile 应该检查是否设置了这个变量,然后生成一个用于安装的命令选项
    • 您能否详细说明您想要做什么? DESTDIR=/some/rpm/builds make install 做它该做的事。您是否需要对其进行修改或对其进行足够的扩展?它可以由install-exec-localinstall-data-local 目标扩展。这些可能会检查是否设置了DESTDIR
    • 类似地,如果 python ... 命令位于您的 Makefile.am 中,您可以这样做:DESTDIR="${DESTDIR:-/}" python setup.py ...
    • 最终我以其他方式解决了这个问题。我在 Makefile.am: DESTDIR ?= / 上面放了一行,这意味着如果没有设置一个值,然后在 python 行中使用它。不知道为什么它不适用于 ${DESTDIR:-/} 构造。我用gnu make和bash,会不会是我的环境不理解?
    • 很多无意义的解决方法,但有没有办法让 automake 将常规 if/else/endif 发出到 makefile 中??
    【解决方案2】:

    我提出了另一种在Is there a way to tell automake not to interpret part of the automakefile? 中偶然发现的方法。但不幸的是,它不适用于ifeq .. else .. endif 条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 2011-07-07
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多