如何获取 autoconf configure.ac 中顶级构建目录的绝对路径?

2024-03-11

我正在开发一个项目,该项目需要一个具有自己的 makefile 和 configure.ac 的子项目。子项目是用于为主项目生成源文件的程序。有一个选项可以禁用该项目的构建并尝试使用已安装的版本。

无论哪种情况,我都会创建一个在 Makefile.am 中使用的变量,其中包含程序的路径。

我的问题是,当使用项目的本地版本时,如何获取其位置以在我的 Makefile.am 中使用?

我努力了

FOOPLACE=${abs_top_builddir}/bar/foo

但这总是让FOOPLACE仅包含/bar/foo。即使原则上,我什至也不确定这是否是正确的方法。


我只是用一个简单的方法做了一些测试configure.ac.

我无法获得合理的价值$abs_top_builddir除非是通过替换(即AC_CONFIG_FILES)。根据预设输出变量(autoconf) http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Preset-Output-Variables.html,它们至少应该在config.status (i.e., AC_CONFIG_COMMANDS)。他们不是。

潜入config.status, 我找到@abs_top_builddir@被设置为值$ac_abs_top_builddir。这看起来很奇怪,我认为这可能是一个错误。我已经把它发送到 bug-autoconf https://lists.gnu.org/archive/html/bug-autoconf/2013-02/msg00008.html看看他们的想法。

这个故事的寓意是:它应该在任何进行替换的地方发挥作用。您也许可以使用$ac_abs_top_builddir within config.status,但我不会依赖它。

这是我使用的测试:

配置.ac:

AC_PREREQ([2.67])
AC_INIT([], [0], [[email protected] /cdn-cgi/l/email-protection])
AC_MSG_NOTICE([notice: ${abs_top_builddir}])
AC_MSG_NOTICE([notice+ac: ${abs_top_builddir}])
AC_CONFIG_COMMANDS_PRE([echo "pre+ac: ${ac_abs_top_builddir}"])
AC_CONFIG_COMMANDS_PRE([echo "pre: ${abs_top_builddir}"])
AC_CONFIG_COMMANDS_POST([echo "post+ac: ${ac_abs_top_builddir}"])
AC_CONFIG_COMMANDS_POST([echo "post: ${abs_top_builddir}"])
AC_CONFIG_COMMANDS([echo],
[echo "config.status+ac: ${ac_abs_top_builddir}"
echo "config.status: ${abs_top_builddir}"])
AC_CONFIG_FILES([test], [chmod +x test])
AC_OUTPUT

test.in:

#!/bin/sh
# -*- sh -*-
# @configure_input@
echo "test: @abs_top_builddir@"
echo "test+ac: @ac_abs_top_builddir@"

运行它autoconf && ./configure && ./test.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取 autoconf configure.ac 中顶级构建目录的绝对路径? 的相关文章

  • 为什么 autoconf 会错误地找到一个以后不可用的函数?

    在 Linux 系统上 我配置了一个软件包 llvm autoconf 找到了arc4random功能 这里是配置期间输出的提取 checking for strerror yes checking for strerror r yes c
  • autoconf 配置警告:/usr/bin/file:没有这样的文件或目录

    当我在 ubuntu 操作系统 16 中使用我的配置时 似乎没有问题 我已经安装了 autoconf 工具和依赖项 当我在 ubuntu 16 或最新版本 中运行相同的配置文件时 问题是我没有安装任何自动工具 我收到以下错误消息 confi
  • Automake 将两个静态库合并为一个

    我正在尝试将预构建静态库中的符号包含到我正在构建的静态库中 然后 我正在构建的静态库将在可执行文件内部使用 我遇到的问题是我的静态库中从其他静态库获取了未定义的符号 这意味着我从预构建的静态库中需要的符号没有包含在我的静态库中 使用自动工具
  • automake环境变量条件

    我有一个文件 Makefile am 我用来生成 Makefile 在生成的 Makefile 中我想要类似的内容 ifndef SOURCECODEPATH SOURCECODEPATH home root source code pat
  • 带空格的 Shell 变量,引用单个命令行选项

    Autoconf 脚本在处 理带有空格的文件名或路径名时遇到问题 例如 configure CPPFLAGS I path with space 结果 config log configure 3012 gcc I path with sp
  • 如何将共享库与 --as-needed 和 automake 链接起来?

    如何链接共享库 as needed使用Automake 当我尝试将标志添加到LDFLAGS I saw libtool如此称呼 bin bash libtool mode link Wl as needed dependencies 这会导
  • Automake - 安装版本“automake-1.14.1”时遇到困难

    我在 Rapbian 2014 09 09 wheezy raspbian 发行版上安装 automake 1 14 1 时遇到问题 我写sh configure然后我写了make然后终端写信给我 make CDPATH ZSH VERSI
  • 使用 Libtool 将静态库强制链接到共享库

    我有一个图书馆 libfoo 编译后的使用libtool分成两个对象 libfoo a 和 libfoo so 我必须创造 使用libtool另外 另一个图书馆 libbar 这将是一个包含所有 libfoo 代码的共享库 libbar s
  • Autoconf:如何将安装路径获取到config.h中

    我的程序需要在运行时加载一些文件 这些文件将安装到指定的任何文件夹中 configure datadir somewhere 由于我的程序需要在运行时知道该文件夹的位置 因此我需要在某处 define 一个符号 以便 C 代码可以以字符串形
  • Automake 变量来整理 Makefile.am

    我有一个目录 src 包含所有源文件 bin 用来在运行 make 命令后存储所有二进制文件 该目录如下所示 BuildDirectory src bin configure Makefile am configure ac 现在在 Mak
  • 如何安装和使用libtool共享库(.lo文件)?

    所以在我运行 libtool 并得到一个libfoo lo and foo o来自我的库源的文件 如何转换libfoo lo文件到一个普通的Linux共享库中 比如libfoo so 1 0 0这样我就可以在我的目标系统上安装并链接到它 从
  • 尝试为 ARM 构建 GDB 时出错

    我正在尝试为我的 Ubuntu 16 04 机器上的手臂构建 GDB 版本 8 0 我打算直接在arm机器上调试 目前没有服务器 我已经执行了这些指令 正如所解释的那样here https sourceware org gdb wiki B
  • 如何将额外的自定义 ./configure autotools 选项传递给 Buildroot 包?

    例如 我想添加选项 enable foo enable bar to a configure命令 Many configure选项可以通过间接设置BR2 配置 但许多软件有如此多的选项 以至于不可能只有一个BR2 为每一个可能的配置 con
  • 如何获取 autoconf configure.ac 中顶级构建目录的绝对路径?

    我正在开发一个项目 该项目需要一个具有自己的 makefile 和 configure ac 的子项目 子项目是用于为主项目生成源文件的程序 有一个选项可以禁用该项目的构建并尝试使用已安装的版本 无论哪种情况 我都会创建一个在 Makefi
  • .h 是从 .h.in 生成的吗?

    我的库在构建后创建的 h 文件中有结构定义 但我在相应的 h in 中找不到这些定义 有人可以告诉我这一切是如何工作的以及它从哪里获取额外信息吗 具体来说 我正在构建 pth 用户空间线程库 它有 pth p h in 它不包含我正在寻找的
  • 尝试安装 pecl 扩展时在 mac os x 10.7.3 上出现 $PHP_AUTOCONF 错误

    我正在尝试使用 pecl http 和 memcache 设置我的机器 在这两种情况下 我都会遇到类似的错误 这是在 MAC OS X 10 7 3 lion 上 我也在上面安装了 XCODE 在运行这些命令之前 我还安装了 Zend Se
  • 使用 GCC 和 autotools 为各个源文件设置编译标志的最佳方法是什么?

    我需要使用自动工具禁用单个文件的优化标志 最好的方法是什么 您是指单个源文件还是单个可执行文件 禁用可执行文件的优化很简单 bin PROGRAMS myprog myprog SOURCES foo c bar c myprog CFLA
  • 在 Intel 机器上构建 Apple Silicon 二进制文件

    如何在 macOS 11 Intel 上编译 C 项目以在 Silicon 上运行 我当前的构建脚本很简单 configure make sudo make install 我尝试过使用 host and target标志与aarch64
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 添加AC_CHECK_LIB路径

    我的configure ac 遇到以下问题 我想添加一个库搜索路径 因为我必须使用的库位于一些疯狂的文件夹中 我的想法是通过一个选项来做到这一点 AC ARG WITH cplex lib path AS HELP STRING with

随机推荐