如何从配置中获取完全扩展的变量?

发布于 2024-08-05 06:03:13 字数 722 浏览 10 评论 0原文

我创建了一个像这样的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=' 导致错误消息 Makefile:24: ***缺少分隔符。停止。

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

I created a configure.ac file like this:

AC_INIT()
set

the purpose of this is to print every available environment variable the configure script creates using set, so I do this:

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

which prints a bunch of variables like

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

So far so good.
The problem is:

  1. I want to expand the variables like ${prefix}/share - but piping
    everything to a file example.sh and executing it using bash doesn't work, because bash complains about modifying read-only variables like UID and expansion itself doesn't seem to work either.
  2. I tried using a makefile for this where expansion works, but it complains about newlines in strings, like in the above output the line IFS=' causes an error message Makefile:24: *** missing separator. Stop.

Does anyone have an idea how to get a fully expanded version of configure's output?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一笑百媚生 2024-08-12 06:03:13

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' \
            < "
lt;" > "$@"
[...]

foo.sh.in

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

The Autoconf manual (I cannot recall or find exactly where) recommends to "manually" do such a kind of variable substitution from within a Makefile.in (or .am if you happen to use Automake):

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' \
            < "
lt;" > "$@"
[...]

foo.sh.in

#!/bin/sh
datarootdir=@datarootdir@
du "$datarootdir"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文