【问题标题】:How to get fully expanded variables out of configure?如何从配置中获得完全扩展的变量?
【发布时间】:2009-09-17 19:27:03
【问题描述】:

我创建了一个这样的 configure.ac 文件:

AC_INIT()
set

这样做的目的是打印配置脚本使用set 创建的每个可用环境变量,所以我这样做:

user@host:~$ autoconf
user@host:~$ ./configure

打印一堆变量,如

build=
cache_file=/dev/null
IFS='   
'
LANG=C
LANGUAGE=C
datarootdir='${prefix}/share'
mandir='${datarootdir}/man'
no_create=

到目前为止一切顺利。 问题是:

  1. 我想扩展像${prefix}/share 这样的变量 - 但是管道 将所有内容写入文件 example.sh 并使用 bash 执行它不起作用,因为 bash 抱怨修改像 UID 这样的只读变量,并且扩展本身似乎也不起作用。
  2. 我尝试使用 makefile 进行扩展,但它抱怨字符串中的换行符,就像上面的输出中的行 IFS=' causes an error message Makefile:24: *** missing separator. Stop.

有人知道如何获得配置输出的完全扩展版本吗?

【问题讨论】:

  • 嗨!你能解释一下你为什么要这么做吗?您的问题听起来像是您正试图以艰难的方式解决另一个问题。 (例如,如果您想检索变量的扩展值,例如 $datadir,有更简单的方法。)
  • 我想创建独立于它们运行的​​ linux 系统的 shell 脚本模板,这样我就可以创建用于设置服务器的脚本,并为第二个实例使用相同的脚本,只需要修改一些参数模板引擎我只使用搜索/替换脚本的变量来做到这一点我需要用所有变量初始化引擎,否则它们不会被替换
  • @adl 你能解释一下处理它的“简单”方法是什么。我也在努力解决这个问题

标签: variables autoconf configure expand


【解决方案1】:

Autoconf 手册(我不记得或找到确切的位置)建议“手动”从 Makefile.in(如果您碰巧使用 Automake,则为 .am)中进行这种变量替换:

Makefile.in

[...]
foo.sh: foo.sh.in
        $(SED) \
            -e 's|[@]prefix@|$(prefix)|g' \
            -e 's|[@]exec_prefix@|$(exec_prefix)|g' \
            -e 's|[@]bindir@|$(bindir)|g' \
            -e 's|[@]datarootdir@|$(datarootdir)|g' \
            < "$<" > "$@"
[...]

foo.sh.in

#!/bin/sh
datarootdir=@datarootdir@
du "$datarootdir"

【讨论】:

    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多