问题标签 [autoconf]
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.
makefile - Makefile 中带有“at 符号”的这些变量是什么意思?
我找不到任何关于此的文档。在 Makefile 中找到这些带有“at”符号的变量到底是什么?例子:
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 工作,所以最终的解决方案如下所示:
makefile - CFLAGS 与 CPPFLAGS
我知道 CFLAGS(或 C++ 的 CXXFLAGS)用于编译器,而 CPPFLAGS 用于预处理器。
但我仍然不明白其中的区别。
我需要为#include 包含的头文件指定一个包含路径——因为#include 是一个预处理器指令,预处理器(CPPFLAGS)是我唯一关心的事情吗?
什么情况下需要给编译器额外的包含路径?
一般来说,如果预处理器找到并包含所需的头文件,为什么需要告诉它额外的包含目录?CFLAGS 到底有什么用?
(在我的情况下,我实际上发现这两者都允许我编译我的程序,这增加了混乱......我可以使用 CFLAGS或CPPFLAGS 来实现我的目标(至少在 autoconf 上下文中)。什么给了?)
emacs - 什么是 ltmain.sh,为什么 automake 说它丢失了?什么是好的自动(make/conf/etc)生成器?
我只想在 linux 中开发一个自动生成 auto(make/conf/...) 的 C 应用程序。我尝试使用 ede 和 anjuta 生成它,但它似乎没有生成 Makefile.am。所以,我尝试运行 automake,它说“ltmain.sh”没有找到。是否有一些易于生成 linux C/C++ 应用程序的基本构建文件。标准做法是什么?大多数人自己编写这些文件吗?
apache - Apache 和 conf.d 安装过程的 Autoconf 宏?
我有一个使用自动工具构建和安装的包。包的一部分是一个可以在本地机器上运行的网站。因此,在包中有一个 .conf 文件,可以复制或链接到 /etc/apache2/conf.d 目录。软件包执行此操作的标准方式是什么?如果可能的话,我希望用户不要有额外的步骤来使网站正常工作。我想让他们安装包,然后能够浏览到 http://localhost/newpackage以启动和运行。
此外,有没有一种方法可以让 autoconf 了解 apache 安装或通过环境的标准方法?如果有人能指出我正确的方向,那就太好了。
史蒂夫
makefile - configure.in: AM_DISABLE_SHARED 不会改变我的 Makefile
我对使用 Makefiles 和 autoconf 非常陌生。我正在使用 Camellia 图像库并尝试将我的代码与他们的库静态链接。当我在 Camellia 图像库上运行“make”时,我在 /usr/local/lib 目录中获得了 libCamellia.a、.so、.la 和 .so.0.0.0 文件。这是我用来用他们的库编译我的代码的命令:
这很好用,但是当我尝试静态链接时,这就是我得到的:
我想静态链接,因为我正在尝试修改 Camellia 源代码,并且我想将我的版本与他们的版本进行比较。因此,经过一番谷歌搜索后,我尝试将 AM_DISABLE_SHARED 添加到 configure.in 文件中。但是在运行 ./configure 之后,我仍然得到完全相同的 Makefile。在我“进行安装”之后,我仍然得到与上面相同的结果。
获得两个版本的代码的简单方法是什么,一个带有原始 Camellia 源代码编译,一个带有我的修改版本?我认为静态库应该可以工作。有一种简单的方法可以让静态库正常工作,还是有其他简单的解决方案可以解决我的问题?每次我想将我的版本与原始版本进行比较时,我只是不想重新“制作”和重新“制作安装”。
c - C 未定义对“some_foo”的引用
我的 gtk+ 应用程序中有 3 个文件:
主.c:
主窗口.h
主窗口.c
当我尝试调用some_foo
主函数并尝试编译时,我看到错误:未定义的对“some_foo”的引用。怎么了?
谢谢你。
autotools - 如何在 AC_CONFIG_SRCDIR 内使用空格转义路径
我需要在 AC_CONFIG_SRCDIR 中包含一些包含空格的路径。我应该如何逃避他们?例如,如果我有“some file.in”,我应该如何声明它:
AC_CONFIG_SRCDIR[某个文件]
c++ - 如何使用具有 C++0x 特性的 autoconf
autoconf
与其他 TR1/BOOST C++0x 模板结合使用shared_ptr
以最大限度地提高可移植性和可维护性的最佳实践是什么?
有了autoconf
我可以确定是否shared_ptr
可用std::tr1::shared_ptr
和/或boost::shared_ptr
. 鉴于相同的功能有两个不同的名称,我有以下问题:
- 在代码中,应该如何
shared_ptr
引用? - 应该
std::tr1::shared_ptr
优先于boost::shared_ptr
?
首先,代码当前正在使用预处理器条件,允许对 的非限定引用shared_ptr
,a
其次,代码使用std::tr1::
overboost::
来最小化对外部库的依赖(即使这些库被广泛使用)。
这两种解决方案通用吗?有更好的吗?
linux - 如何使用 Autoconf 检查 Linux 版本?
我的程序至少需要 Linux 2.6.26(我使用 timerfd 和其他一些 Linux 特定的功能)。
我对如何编写这个宏有一个大致的了解,但我对为 Autoconf 编写测试宏没有足够的知识。算法:
- 运行“uname --release”并存储输出
- 解析输出并减去 Linux 版本号 (MAJOR.MINOR.MICRO)
- 比较版本
我不知道如何运行命令、存储输出和解析它。
也许这样的宏已经存在并且可用(我还没有找到)?