问题标签 [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.
dependencies - automake中的头文件依赖
我想创建一个Makefile.am
文件,该文件生成文件中提到的一个头xxx.c
文件。
假设xxx.c
包含:
并且我有一个规则在结束时创建它Makefile.am
:
我必须改变什么才能使xxx.c
编译依赖于version.h
?我试过nodist_progname_SOURCES=version.h
了,但这似乎没有做到。
filenames - Automake 模式扩展
我想在零件的一个Makefile.am
文件中包含许多文件xxx_SOURCES = ...
。有没有办法在那里使用典型的外壳扩展?我正在寻找的是一个等效的工作:
autotools - Autoconf - config.h 去哪儿了?
我正在编写自己的单元测试库(使用 autoconf、automake 和 libtool)以更好地满足我的需求(我不需要超大量的功能,只需要一个测试运行程序和断言)。我已经到了它似乎可以使用的地步。
当然,它使用 config.h 来确定要包含的标头。问题是我不确定 config.h 应该去哪里,因为它很容易与其他项目的 config.h 发生冲突,而且它依赖于架构。
我的安装此标头的方法应该是什么?(所有其他标题都需要它)
gnu - GNU Autotools:如何在根源目录上方的“make dist”压缩包中包含源文件?
我有一个 Subversion 项目,它使用 Gnu Autotools(即 automake、autoconf 和 libtool)来管理子文件夹(称为“子包”)中的源代码。子包引用子包根源目录之上的源文件,并且对其他子包是通用的。不幸的是,当运行 'make dist' 来创建发行版 tarball 时,公共源文件不会包含在发行版中。
有没有办法在分发源代码之前使用 autoconf/automake 将这些公共源文件移动到子包的子目录中,并让 makefile 自行调整以正确指向重新定位的源文件?显然,可以在编译之前让 makefile 移动这些源文件,但是对于在 Subversion 存储库中工作,这会导致问题,因为这些移动的文件是受修订控制的,并且很容易意外编辑移动的文件而不是原始文件.
configuration - autoconf/automake 的外部库配置宏
是否有一个 autoconf 宏来配置通用库,它可以:
- 生成 --with 配置选项
- 设置库和包含路径
- 设置编译器/预处理器和链接器标志
- 检查库是否存在并包含文件
- 设置配置宏
现在,我正在使用 ARG_WITH、CHECK_LIB 等进行所有操作。这些步骤是通用的,最终会被复制/粘贴并进行细微的更改。我搜索宏存档并没有找到通用解决方案。
谢谢
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
进而:
丑陋但应该工作。
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 生成的行...)
shared-libraries - Automake 和标准共享库
如何强制 automake 创建标准共享库,而不是 libtoolized 库?通常,我会创建abc.so
一个完整路径引用并加载到主程序中的文件。有没有办法强迫 AM 做同样的事情?如果我将其列为 _LIBRARY,automake 会抱怨:'abc.so' is not a standard library name; did you mean 'libabc.a'
澄清一下:是的,我只需要.so
支持——不需要静态。是的,我想要一个自定义文件名。
c++ - 将版本和架构信息插入 C++ 源代码的最佳方法是什么?
我希望我的 C++ 程序包含一个“--version”选项,它会导致它打印出来:
- 为其编译的架构
- 源版本(例如,v0.1.0)
- 应用程序名称
我也是第一次使用 autoconf/automake,我注意到 configure.ac 既有二进制文件又有版本。它目前没有架构信息,我不想添加这样的信息,因为我将在多个拱门下编译。
有没有一种简单的方法可以自动在头文件或源文件中插入版本/架构/应用程序名称信息?大多数 C++ 程序员如何做到这一点?
c++ - 如何设置自动工具以在多个系统上同时为单独的架构构建项目?
我有一个使用 automake 和 autoconf 的 C++ 项目。我对这两个都是新手。
我的主目录是网络安装的——在我们拥有的每台服务器上都相同——我想在不同的机器上同时编译和运行项目(及其可执行文件)。
我们的服务器通常采用不同的架构。我的桌面是 32 位的,但服务器是 64 位的,等等。
configure.ac
我在为机器架构命名的单独目录中使用和Makefile.am
编译目标文件有哪些选项?在常规 Makefile 中执行此操作相对简单,但我不知道如何设置自动工具。