6

我创建了一个这样的 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在扩展工作的地方使用 a for this ,但它抱怨字符串中的换行符,就像上面的输出中的行IFS=' causes an error message Makefile:24: *** missing separator. Stop.

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

4

1 回答 1

7

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

生成文件.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"
于 2009-10-13T15:16:44.930 回答