问题标签 [automake]

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 回答
2740 浏览

dependencies - automake中的头文件依赖

我想创建一个Makefile.am文件,该文件生成文件中提到的一个头xxx.c文件。

假设xxx.c包含:

并且我有一个规则在结束时创建它Makefile.am

我必须改变什么才能使xxx.c编译依赖于version.h?我试过nodist_progname_SOURCES=version.h了,但这似乎没有做到。

0 投票
2 回答
421 浏览

filenames - Automake 模式扩展

我想在零件的一个Makefile.am文件中包含许多文件xxx_SOURCES = ...。有没有办法在那里使用典型的外壳扩展?我正在寻找的是一个等效的工作:

0 投票
3 回答
3375 浏览

autotools - Autoconf - config.h 去哪儿了?

我正在编写自己的单元测试库(使用 autoconf、automake 和 libtool)以更好地满足我的需求(我不需要超大量的功能,只需要一个测试运行程序和断言)。我已经到了它似乎可以使用的地步。

当然,它使用 config.h 来确定要包含的标头。问题是我不确定 config.h 应该去哪里,因为它很容易与其他项目的 config.h 发生冲突,而且它依赖于架构。

我的安装此标头的方法应该是什么?(所有其他标题都需要它)

0 投票
2 回答
2360 浏览

gnu - GNU Autotools:如何在根源目录上方的“make dist”压缩包中包含源文件?

我有一个 Subversion 项目,它使用 Gnu Autotools(即 automake、autoconf 和 libtool)来管理子文件夹(称为“子包”)中的源代码。子包引用子包根源目录之上的源文件,并且对其他子包是通用的。不幸的是,当运行 'make dist' 来创建发行版 tarball 时,公共源文件不会包含在发行版中。

有没有办法在分发源代码之前使用 autoconf/automake 将这些公共源文件移动到子包的子目录中,并让 makefile 自行调整以正确指向重新定位的源文件?显然,可以在编译之前让 makefile 移动这些源文件,但是对于在 Subversion 存储库中工作,这会导致问题,因为这些移动的文件是受修订控制的,并且很容易意外编辑移动的文件而不是原始文件.

0 投票
1 回答
836 浏览

configuration - autoconf/automake 的外部库配置宏

是否有一个 autoconf 宏来配置通用库,它可以:

  • 生成 --with 配置选项
  • 设置库和包含路径
  • 设置编译器/预处理器和链接器标志
  • 检查库是否存在并包含文件
  • 设置配置宏

现在,我正在使用 ARG_WITH、CHECK_LIB 等进行所有操作。这些步骤是通用的,最终会被复制/粘贴并进行细微的更改。我搜索宏存档并没有找到通用解决方案。

谢谢

0 投票
2 回答
283 浏览

c++ - 是否可以为 DLL/SO 构建指定特定的标志/定义?

如何为仅 DLL 构建指定一些唯一标志。默认情况下,libtool 添加-DDLL_EXPORT这对于大多数遵循 GNU 约定的项目来说都很好,但是如果我使用 Boost,例如,我可能需要为我的库标志指定:-DDLL_EXPORT -DBOOST_ALL_DYN_LINK对于 DLL 仅构建,有时我也需要条件构建,所以我需要一些DLL/SO 构建的特定定义。

不幸的是,我找不到如何使用 libtool 执行此操作的方法,我应该使用哪些标志?

PS:甚至不要试图建议转移到 CMake。

例子:

我使用链接到 bar 的库 foo 并要求 -DBAR_EXPORTS 仅获取动态库的符号。

有没有类似的东西

有人吗?

替代解决方案:(非常丑陋)

创建一个文件`defines.h

进而:

丑陋但应该工作。

0 投票
1 回答
3713 浏览

c++ - 针对 Automake 生成的库进行编译时未定义的引用

我在使用 automake 的项目中遇到了一个非常奇怪的链接错误。从手册来看,我所做的似乎很简单,所以我真的想知道我会做错什么......

我的项目有三个文件夹:

  • src/common,我在其中将一些 C++ 文件编译成一个 libube-common.a 静态库
  • src/engine,我在其中将一些文件编译成一个 libube-engine.a 静态库
  • src/client,其中......你猜对了, libue-client.a ,还有一个文件 ube.cpp 这是我的主要

每个库都使用 Makefile.am 编译,如下所示:

这导致各种对象使用如下行构建:

所有这些都放在图书馆里:

所有这些看起来都很好,我什至可以将一些小测试程序与库链接(在同一个 makefile 中)

然后,在我的主程序的 Makefile.am 中,我要求链接到本地​​库:

这就是我得到这样的错误的地方:

起初我虽然是因为一些静态符号,但我也遇到了非静态符号的问题。

我检查了生成的库,它似乎正确包含符号:

唯一的解决方法是明确链接到我的 .o 文件(通过将它们添加到 ube_LDADD 行......但这有点违背使用库的想法!!)

我似乎一直在关注手册:http ://www.gnu.org/software/hello/manual/automake/Linking.html#Linking

但显然我在某个地方搞砸了,所以欢迎任何想法!

谢谢

酸碱度


编辑:图书馆本身似乎工作,这似乎是一个链接问题。我可以将我的测试用例程序与它们联系起来。这是我所做的:

在文件夹 src/common/tests 中,有一个名为 common-tests.cpp 的 main 运行单元测试;common-tests bin 与库 libube-common.a 链接(它只需要 lib 内的对象,因为这些是单元测试)

运行 make check 时,测试程序是这样编译的:

一切都很完美。我能看到的唯一区别是,在这种情况下,库就在要链接的可执行文件旁边……这真的有什么不同吗?

另外,我尝试使用 -Wl,--whole-archive 之类的选项,但没有帮助(另外我不知道如何将它们添加到 Automake 生成的行...)

0 投票
4 回答
4026 浏览

shared-libraries - Automake 和标准共享库

如何强制 automake 创建标准共享库,而不是 libtoolized 库?通常,我会创建abc.so一个完整路径引用并加载到主程序中的文件。有没有办法强迫 AM 做同样的事情?如果我将其列为 _LIBRARY,automake 会抱怨:'abc.so' is not a standard library name; did you mean 'libabc.a'

澄清一下:是的,我只需要.so支持——不需要静态。是的,我想要一个自定义文件名。

0 投票
2 回答
678 浏览

c++ - 将版本和架构信息插入 C++ 源代码的最佳方法是什么?

我希望我的 C++ 程序包含一个“--version”选项,它会导致它打印出来:

  • 为其编译的架构
  • 源版本(例如,v0.1.0)
  • 应用程序名称

我也是第一次使用 autoconf/automake,我注意到 configure.ac 既有二进制文件又有版本。它目前没有架构信息,我不想添加这样的信息,因为我将在多个拱门下编译。

有没有一种简单的方法可以自动在头文件或源文件中插入版本/架构/应用程序名称信息?大多数 C++ 程序员如何做到这一点?

0 投票
1 回答
989 浏览

c++ - 如何设置自动工具以在多个系统上同时为单独的架构构建项目?

我有一个使用 automake 和 autoconf 的 C++ 项目。我对这两个都是新手。

我的主目录是网络安装的——在我们拥有的每台服务器上都相同——我想在不同的机器上同时编译和运行项目(及其可执行文件)。

我们的服务器通常采用不同的架构。我的桌面是 32 位的,但服务器是 64 位的,等等。

configure.ac我在为机器架构命名的单独目录中使用和Makefile.am编译目标文件有哪些选项?在常规 Makefile 中执行此操作相对简单,但我不知道如何设置自动工具。