问题标签 [autotools]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
196 浏览

autotools - AC_CHECK_LIB 可以用于非常规命名的库吗?

AC_CHECK_LIB 接受您要检查的共享库的基本名称作为参数。因此,对于名为“libxyz.so”的库,您可以将库“xyz”的基本名称指定为 AC_CHECK_LIB 的参数。如果我有一个名为 xyz.so 的库(注意:不是 libxyz.so),我如何使用 autoconf 检查该库的可用性/可用性?

0 投票
2 回答
18487 浏览

include - 运行configure时如何覆盖环境变量?

在 Linux 的任何主要包中,running./configure --help都会在最后输出:

如何使用这些变量来包含目录?我尝试运行./configure --CFLAGS="-I/home/package/custom/"./configure CFLAGS="-I/home/package/custom/"但是这些不起作用。有什么建议么?

0 投票
1 回答
14872 浏览

autotools - Autoconf——包括一个静态库(新手)

我正在尝试将我的应用程序从手动构建迁移到 autoconf,到目前为止运行良好。但是我有一个静态库,我不知道如何集成。该库不会位于通常的库位置 - 二进制文件(.a 文件)和标头(.h 文件)的位置将作为配置参数给出。(值得注意的是,即使我将 .a 文件移动到 /usr/lib 或我能想到的任何其他位置,它仍然无法工作。)它也没有传统命名(它不以“lib”或“l ”)。

手动编译正在使用这些(目录不可预测 - 这只是一个示例):

(呃,我实际上不明白为什么直接引用 .a 文件,而不是使用 -L 或其他任何东西。是的,我对构建 C 程序的理解半生不熟。)

因此,在我的 configure.ac 中,我可以使用相关的 configure 参数通过 AC_CHECK_HEADER 成功找到头文件(.h 文件)。在 AC_CHECK_HEADER 中,我将位置添加到 CPFLAGS 中,实际 C 代码中头文件的#include 很好地选择了它。

给定一个已放入 $location 的配置参数,并且所需文件的名称是 helper.h 和 helper.a (它们都在同一个目录中),这是目前有效的:

我遇到困难的地方是获取链接的二进制文件(.a 文件)。无论我尝试什么,我总是会收到有关对该库的函数调用的未定义引用的错误。我很确定这是一个链接问题,因为我可以对 C 代码大惊小怪,并在对该库的函数调用中故意犯错误,这会产生较早的错误,表明函数原型已被加载并用于编译。

我尝试将包含 .a 文件的位置添加到 LDFLAGS,然后执行 AC_CHECK_LIB 但找不到。

也许我的语法是错误的,或者我错过了一些更基本的东西,这并不奇怪,因为我是一个新手并且并不真正知道我在做什么。

这是我尝试过的:

没有骰子。AC_CHECK_LIB 正在寻找 -lhelper 我猜(或 libhelper?)所以我不确定这是否是一个问题,所以我也尝试了这个(省略 AC_CHECK_LIB 并直接在 LDFLAGS 中包含 .a),但没有运气:

为了模拟手动编译,我尝试删除 -L 但这无济于事:

我尝试了其他组合和排列,但我想我可能会遗漏一些更基本的东西......

================ 更新

我让它使用 _LDADD 使用 Makefile.am 中的 .a 文件的硬编码路径,如下所示:

但我无法预测 .a 文件的位置。出于某种原因,在 configure.ac 中定义 myprog_LDADD 不起作用(我希望它这样做,所以我可以使用我的动态位置变量),并且对 LDFLAGS、myprog_LDFLAGS、AM_LDFLAGS 的任何更改组合似乎都不起作用。

如果在 Makefile.am 中,我尝试使用在 configure.ac 中定义的变量位置,它就不起作用

================ 更新

我想我明白了,但由于我不知道我在做什么,我真的很感激一些反馈。我使用 AC_SUBST() 让 myprog_LDADD 从 configure.ac 工作,所以最终的解决方案如下所示:

0 投票
6 回答
127051 浏览

makefile - CFLAGS 与 CPPFLAGS

我知道 CFLAGS(或 C++ 的 CXXFLAGS)用于编译器,而 CPPFLAGS 用于预处理器。

但我仍然不明白其中的区别。

我需要为#include 包含的头文件指定一个包含路径——因为#include 是一个预处理器指令,预处理器(CPPFLAGS)是我唯一关心的事情吗?

什么情况下需要给编译器额外的包含路径?

一般来说,如果预处理器找到并包含所需的头文件,为什么需要告诉它额外的包含目录?CFLAGS 到底有什么用?

(在我的情况下,我实际上发现这两者都允许我编译我的程序,这增加了混乱......我可以使用 CFLAGSCPPFLAGS 来实现我的目标(至少在 autoconf 上下文中)。什么给了?)

0 投票
1 回答
762 浏览

apache - Apache 和 conf.d 安装过程的 Autoconf 宏?

我有一个使用自动工具构建和安装的包。包的一部分是一个可以在本地机器上运行的网站。因此,在包中有一个 .conf 文件,可以复制或链接到 /etc/apache2/conf.d 目录。软件包执行此操作的标准方式是什么?如果可能的话,我希望用户不要有额外的步骤来使网站正常工作。我想让他们安装包,然后能够浏览到 http://localhost/newpackage以启动和运行。

此外,有没有一种方法可以让 autoconf 了解 apache 安装或通过环境的标准方法?如果有人能指出我正确的方向,那就太好了。

史蒂夫

0 投票
1 回答
603 浏览

makefile - 如何在配置/制作结束时打印消息?

我正在尝试使用 GNU autotools 设置软件包,并希望收到一条消息“构建成功!” 在用户运行 make 后(配置后)输出。我将如何实现这样的功能?谢谢

0 投票
1 回答
1989 浏览

autotools - 'make check' 后 Autotools 自动调用 lcov

我已经成功设置了一个自动工具项目,其中测试使用仪器编译,因此我可以获得测试覆盖率报告。

成功“进行检查”后,我可以通过在源目录中运行 lcov 来获取报告。

我现在面临的问题是我想自动化这一步。我想将此添加到“进行检查”或将其作为单独的目标“进行检查覆盖”。理想情况下,如果覆盖率低于某个百分比,我想解析结果并失败。问题是我根本无法弄清楚如何添加自定义目标。

我得到的最接近的是找到这个示例 autotools 配置,但我看不到在该项目中的哪个位置添加了目标“make lcov”。我只能在 m4/auxdevel.m4 中看到一些配置标志。

有小费吗?

0 投票
2 回答
1368 浏览

autotools - 如何编译具有静态链接依赖项的 autotools 项目?

我想使用一个开源库。由于我想将我的软件作为二进制包传播,我不希望库依赖于其他库,所以我需要静态链接依赖关系。

现在由于库是开源的并且没有提供二进制文件,我自己编译它。该库使用自动工具,我没有找到任何关于如何静态链接依赖项的有用文档。我所做的尝试是使用 --enable-static 调用配置脚本,但这显然只告诉 configure 编译库的静态版本 - 但我需要的是一个包含它所依赖的所有库的动态库。

因此,我需要一种方法来告诉 configure 静态链接依赖项,或者一种方法来对构建的库进行后处理以包含所有依赖项。谁能告诉我该怎么做?

哦,如果重要的话:我使用的是 64 位 Snow Leopard。

0 投票
1 回答
129 浏览

build - 如何基于 GNU Build System 提取部分项目?

当我将一些子目录从“./configure”管理的项目和所有这些东西中移开时,它会尝试访问一些“../../configure.ac”和其他东西,并且不容易构建。

如何提取此类项目的一部分并使其独立?

0 投票
2 回答
429 浏览

autotools - 如何在 AC_CONFIG_SRCDIR 内使用空格转义路径

我需要在 AC_CONFIG_SRCDIR 中包含一些包含空格的路径。我应该如何逃避他们?例如,如果我有“some file.in”,我应该如何声明它:

AC_CONFIG_SRCDIR[某个文件]