Articles of autotools

Automake:依赖于构build结果

我使用automake和autoconf。 在子目录src / Makefile.am中包含 bin_PROGRAMS = hello hello_SOURCES = hello.c 在构build好你好之后,我想在二进制文件上运行一个工具(一些安装在系统上的分析器/优化器)来修改它(例如strip)或生成统计数据(例如矮人,pahole等)。 为此目的,顶层目录中的Makefile.am包含 tool: tool src/hello 当build立你好与执行制造工具一切都很好。 当用户运行制作工具而不构build二进制文件时会出现问题。 我怎样才能强制build立bin_PROGRAMS(可能是一个列表)或只是作为目标工具的依赖关系的问候二进制文件? 也不 tool: bin_PROGRAMS tool src/hello 也不 tool: src/hello tool src/hello 工作。

学习如何使用GNU Autotools打包我的程序时遇到麻烦

我首次尝试使用GNU Autotools来打包名为MyShell的C程序。 我已经尝试了两次,但都失败了。 我遵循这个简单的教程 ,但在我的程序不同,导致问题(我认为)是有1个.h文件和5个.c文件,而本教程只使用一个.c文件。 这里是我的程序的文件结构: MyShell / 自述 SRC / SRC / CommandExecutor.c CommandReader.c ForkLauncher.c MAIN.C MyShell.h MyShellLoop.c 任何有关如何编写Makefile.am文件,configure.ac文件等的指导都将非常值得赞赏,或者有关使用Autotools更复杂的程序的更详细的教程。 编辑 这些是我使用的文件: MyShell / src目录/ Makefile.am bin_PROGRAMS = MyShell MyShell_SOURCES = Main.c MyShell / Makefile.am SUBDIRS = src dist_doc_DATA = README MyShell / configure.ac AC_INIT([MyShell], [1.0], [<my email address>]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ […]

尝试运行faac的引导脚本,但遇到错误

我试图安装faac,并遇到错误。 以下是我尝试构build它时遇到的错误: [root@test faac]# ./bootstrap configure.in:11: warning: underquoted definition of MY_DEFINE run info '(automake)Extending aclocal' or see http://sources.redhat.com/automake/automake.html#Extending-aclocal aclocal:configure.in:17: warning: macro `AM_PROG_LIBTOOL' not found in library common/mp4v2/Makefile.am:5: Libtool library used but `LIBTOOL' is undefined common/mp4v2/Makefile.am:5: common/mp4v2/Makefile.am:5: The usual way to define `LIBTOOL' is to add `AC_PROG_LIBTOOL' common/mp4v2/Makefile.am:5: to `configure.in' and run `aclocal' and `autoconf' again. […]

如何弄清楚从哪里加载程序数据?

我有一个使用C ++编写的项目(使用glibmm帮助),我使用自动工具来pipe理它。 我必须问的问题是:“我怎样才能从地球上find从哪里来的东西?”。 虽然我可以在autotools上find所有的指南,但是没有人回答这个问题。 例如,地图进入$DATADIR/maps (通常是/usr/[local/]share/myprogram/maps ,Autotools会把它们放在那里,但我怎么知道它是否放在那里,或$HOME/myprogram/maps并加载它们(理想情况下它会先search$PWD ,但这很容易)。

使用autotools与unit testing共享文件

我有一个项目使用autoconf和automake结构如下: / SRC / class.h class.cpp testing/ class_unittest.cpp 在class_unittest.cpp中,我将class.h包含在源文件中,并且也编译了class.cpp文件。 在automake config for test中添加../src作为AM_CPPFLAGS = -I ../ src / definition中新的包含path,并在SOURCES定义中相对引用class.cpp。 当我从根目录构build软件时它工作的很好,但是如果我尝试通过在根目录和dir中创build一个dir foo来做一个VPATH构build./configure && make我将会丢失头文件class.h尝试编译class_unittest.cpp时出错。 那么如何分享testing头以避免这个问题呢?

我可以通过使用AC_XXXX_CONFIG语法把我的macros定义到config.h吗?

我知道AC_SUBST(VAR)将VAR传递给Makefile.am。 有没有什么语法来生成我的#define config.ac config.h中?

如何交叉编译ARM的autotools项目?

我正在寻找交叉编译使用GNU autotools构build系统的现有库。 我在我的主机中安装了一个Linaro arm-gcc工具链,我可以使用arm-gcc直接编译小程序。 主机: Ubuntu 12.04 Intel x64 目标机器: Ubuntu 14.04 ARM 32位(类似于Raspberry-Pi的板子) 我有一个库源代码,它有configure.ac和Makefile.am文件。 我想在主机上编译这个代码,并生成可以复制到目标平台的ARM二进制文件。 什么是规范的方式来做到这一点? 具体来说,我正在寻找一些适用于C语言中“Hello World”应用程序/库的工具,它使用arm-linux-gnueabi-gcc和autotools进行交叉编译。

确保config.h包含一次

我有一个库工程,我正在使用Linux中的autotools套件。 我对自动工具(本周)颇为陌生。 我已经学会了操作的基础知识。 我有一个关于如何保持config.h的内容不被重新定义的问题。 我很惊讶地发现生成的config.h文件不能:1)将每个macros包装在#ifndef ; 2)整个文件没有被包装在标准的#ifndef CONFIG_H 。 正如我所暗示的,这个代码是build立在Windows和Linux上的。 因此,有一些macros的使用, _linux (我不是说这是最好的名字,但它在任何地方都在使用)把元素引入仅存在于Linux中的类。 因此,这将会发生 header.h #ifndef HEADER1_H #define HEADER1_H #ifdef HAVE_CONFIG_H #include "config.h" #endif #endif source.cxx #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "header.h" // oops, preprocessor gets excited because of redefs 一个简单的解决scheme是在生成config.h.in之后,在config.h.in执行标准独特的包装。 不过,我想知道,有没有更好的方法来处理这个问题呢? 我不能成为第一个遇到这个问题的人,甚至可能有一个在configure.ac中处理它的手段,但是作为一个完整的新手,我不知道该怎么search。

构build嵌套Autotools包没有安装

我想要的是与嵌套自动工具包一起构build我的自动工具包。 这是一个静态库,如果你inputmake && make install ,通常这个包make && make install $prefix/lib安装到$prefix/lib文件夹中 子包档案: configure.ac AC_INIT([testlib],[1.0],[bugs@anonym.net]) AM_INIT_AUTOMAKE([foreign -Wall -Werror]) AC_PROG_CC() AC_PROG_RANLIB() AC_CHECK_HEADERS() AC_LANG([C]) AC_CONFIG_FILES([Makefile src/Makefile]) AC_OUTPUT Makefile.am SUBDIRS = src SRC / Makefile.am lib_LIBRARIES = libtestlib.a libtestlib_a_SOURCES = testlib.c include_HEADERS = testlib.h 但我想在我的autotools包中使用它作为一个嵌套的包,只需要它在build立时间的链接。 那么我如何实现构build和安装我的软件包,但只是在不修改 configure.ac或子包中的Makefile.am的情况下构build子/嵌套软件包? 一些代码片断非常感谢! 最好的问候,Sebi2020

如何在configuration中打印Cmacros的值

我有configure.in脚本。 我想要调用configure (在autoheader && autoconf ),并从系统头page_types.h看到PAGE_SHIFTmacros的值。 像这样的东西: checking PAGE_SHIFT… 12 我试过这些: 1。 AC_CHECK_DECL([PAGE_SHIFT],[HAVE_PAGE_SHIFT=$PAGE_SHIFT],[], [#include <linux/module.h>]) AC_MSG_NOTICE([${HAVE_PAGE_SHIFT}]) 结果:检测到macrosPAGE_SHIFT ,但尚未打印 checking whether PAGE_SHIFT is declared… yes configure: 2。 HAVE_PAGE_SHIFT="Unknown" AC_MSG_CHECKING([PAGE_SHIFT]) AC_COMPILE_IFELSE( [ AC_LANG_PROGRAM([ #include <linux/module.h> #include <stdio.h> ], [ printf("%d\n", PAGE_SHIFT); ])], [HAVE_PAGE_SHIFT="$PAGE_SHIFT"], []) AC_MSG_RESULT([${HAVE_PAGE_SHIFT}]) 结果:不起作用 checking PAGE_SHIFT… 3。 AC_MSG_CHECKING(['PAGE_SHIFT' value]) AC_RUN_IFELSE( [ #include <linux/module.h> #include <stdio.h> […]