标签: autotools

使用Autotools预编译的头文件

是否可以在使用automake/libtool的项目中使用gcc预编译头文件?

添加新的make规则来构建预编译头文件并不困难.问题是你还必须添加由libtool和AFAIK引入的编译标志,它无法处理标头输入文件.

你怎么能这样做?

automake autoconf autotools precompiled-headers libtool

9
推荐指数
1
解决办法
1959
查看次数

Hello World Library使用autotools

使用autotools创建bin程序非常简单我需要定义两个文件.

`Makefile.am"

bin_PROGRAMS = hello
hello_SOURCES = hello.c
Run Code Online (Sandbox Code Playgroud)

`configure.in'

AC_INIT(hello.c)
AM_INIT_AUTOMAKE(hello,1.0)
AC_PROG_CC
AC_PROG_INSTALL
AC_OUTPUT(Makefile)
Run Code Online (Sandbox Code Playgroud)

任何正文可以使用autotools 创建静态的最小例子吗?

automake autoconf autotools

9
推荐指数
1
解决办法
6713
查看次数

GCC没有链接正确的库

我的系统4.6.2和4.7.0上安装了两个版本的GCC.我正在运行Fedora Core 16.

安装4.6.2并安装/usr/bin4.7.0 /home/nerozehl/local/bin.对于C++库和运行时也被编译和安装了/home/nerozehl/local/lib/home/nerozehl/local/lib64.

我还安装了两个版本的Boost,其中包含/usr/lib64/home/nerozehl/local/lib.(分别提升1.47.0和1.49.0)

我遇到的问题是g ++/ld链接到默认库,而不是新的库/home/nerozehl/local.我configure用来生成Makefile,我这样称呼它:

CXX=g++47 CXXFLAGS="-g -O0 -pg" LDFLAGS="-L/home/nerozehl/local/lib" ./configure --prefix=/home/nerozehl/local
Run Code Online (Sandbox Code Playgroud)

住在哪g++47/home/nerozehl/local/bin(在我的$PATH).

当我编译时,一切都很好,并且使用了较新的标题,但是当我检查它链接的内容时:

ldd source/noes
    linux-vdso.so.1 =>  (0x00007fffebfff000)
    libboost_filesystem-mt.so.1.47.0 => /usr/lib64/libboost_filesystem-mt.so.1.47.0 (0x0000003c6a800000)
    libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x0000003c6a400000)
    libboost_program_options-mt.so.1.47.0 => /usr/lib64/libboost_program_options-mt.so.1.47.0 (0x0000003c6ac00000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c6dc00000)
    libm.so.6 => /lib64/libm.so.6 (0x0000003c68c00000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c69c00000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003c68800000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c69000000)
    librt.so.1 => /lib64/librt.so.1 (0x0000003c69800000)
    /lib64/ld-linux-x86-64.so.2 …
Run Code Online (Sandbox Code Playgroud)

c++ gcc g++ autotools ld

9
推荐指数
1
解决办法
6163
查看次数

GNU Autotools:没有版本信息的重建

我需要构建一个配置了autotools的lib.通常的configure && make && make install步骤产生版本化的共享库,类似于libfoo.so.x.x是否可以修改configure.ac或Makefile.am(当然还有后续的autoreconf),以便构建非版本化的lib.

谢谢!

automake autoconf autotools

9
推荐指数
1
解决办法
2306
查看次数

使用Automake更正GCC命令行顺序

我有一个autotools项目,可以在Mac上编译得很好,但在Linux(Ubuntu 12.04.1 LTS)下,命令行传递给gcc库相对于目标文件乱序.例如,autotools生成以下命令来编译我的代码,一个名为test.c二进制文件的文件命名为test:

gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -O2 -lglib-2.0 -o test test-test.o
Run Code Online (Sandbox Code Playgroud)

此命令行失败:

/home/user/glib-test/test.c:4: undefined reference to `g_malloc`
/home/user/glib-test/test.c:5: undefined reference to `g_free`
Run Code Online (Sandbox Code Playgroud)

但是,如果我从命令行编译并将其切换,以便库引用位于目标文件之后,它可以正常工作:

gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -O2 -o test test-test.o -lglib-2.0
Run Code Online (Sandbox Code Playgroud)

挑战在于我无法弄清楚如何强制Autotools以正确的顺序生成命令行.为了清楚起见,我在这里重现了简单的测试用例.首先是configure.ac:

dnl Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(glib-test, 1.0)

AC_CANONICAL_SYSTEM
AM_INIT_AUTOMAKE()

AC_PROG_CC
AM_PROG_CC_C_O
PKG_CHECK_MODULES(GLIB, glib-2.0 > 2.0)
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
Run Code Online (Sandbox Code Playgroud)

接下来很简单Makefile.am:

CFLAGS=-Wall
bin_PROGRAMS=test
test_CFLAGS=$(GLIB_CFLAGS)
test_LDFLAGS=$(GLIB_LIBS)
test_SOURCES=test.c
Run Code Online (Sandbox Code Playgroud)

最后,这个最小测试用例的源代码,test.c:

#include <glib.h>

int …
Run Code Online (Sandbox Code Playgroud)

linux automake gcc autotools

9
推荐指数
1
解决办法
3316
查看次数

重新生成.Plo文件而不运行./configure

我正在尝试挖掘一个基于autotools的项目,实际上有点大.我正在研究它的一小部分,一个子目录.我需要在这个小部分内不断添加/移动/删除文件和目录.

每次在顶级运行./configure不仅耗费时间,而且会导致整个对象树变得无效(抱歉这些条款,但我对此有点新意).所以我想出了如何从Makefile.am重新生成Makefile.in(通过运行automake path /到/ my/part),我想出了如何从构建树中的Makefile.in重新生成Makefile(通过运行./config.status)路径/到/我/部分).但是我仍然无法弄清楚:如何重新生成所有依赖项文件(.deps/*.在构建树中的每个子目录中的Plo).实际上,再次运行configure可以解决问题.所以,我的问题是:如何重新生成依赖文件而不再运行configure?提前致谢.

autotools

8
推荐指数
1
解决办法
4417
查看次数

./configure && make install失败

早安我正在安装RabbitMQ库时发现了一个问题:

autoreconf -i && ./configure && make && sudo make install
Run Code Online (Sandbox Code Playgroud)

但是./configure停在这个位置:

checking for gcc option to accept ISO C99... -std=gnu99
./configure: line 11104: syntax error near unexpected token `0.17'
./configure: line 11104: `PKG_PROG_PKG_CONFIG(0.17)'
Run Code Online (Sandbox Code Playgroud)

linux pkg-config autotools configure rabbitmq

8
推荐指数
1
解决办法
5834
查看次数

如何在GNU Autotools项目中包含Boost?

我的项目使用GNU autotools(aclocal && autoconf && ./configure && make)编译.我想使用Boost,我希望其他人也可以编译它.

  1. 我应该将Boost放在项目的目录中,还是依赖系统的Boost?
  2. 我该如何告诉autotools使用Boost?我用谷歌搜索并发现许多m4文件声称这样做 - 但我应该把那些m4文件放在哪里?我可以在我的/usr/share/aclocal目录中存储一个,但这对使用其他想要编译项目的人没有帮助./configure && make.

c++ boost makefile autotools

8
推荐指数
2
解决办法
5387
查看次数

Libtool为对象添加前缀,但gcov要求它们没有前缀

我需要gcov在我正在处理的共享库上执行一些测试覆盖.

问题是libtool将目标文件重命名为my-name.c,libmylib_la-my-name.lo并且gcov无法处理该转换.每次运行它时,cannot open notes file都会生成错误.

如果我手动重命名my-name.clibmylib_la-my-name.c后构建gcov工作正常,所以没有其他问题,除了文件名截断.

附录

试图提供一个最小的工作示例,我发现文件名修改只在lib..._la_CFLAGS设置时(以及设置为空值时)发生.

cat <<EOT > configure.ac
AC_INIT(sample,0.0.1)
AC_CONFIG_SRCDIR(configure.ac)
AM_INIT_AUTOMAKE(foreign)
LT_INIT
AC_PROG_CC
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
EOT

cat <<EOT > Makefile.am
lib_LTLIBRARIES=libsample.la
libsample_la_SOURCES=sample.c
# The following line triggers the filename mangling (libsample_la-sample.lo instead of sample.lo)
libsample_la_CFLAGS=
EOT

touch sample.c && autoreconf -if && ./configure && make
Run Code Online (Sandbox Code Playgroud)

有没有办法避免libtool操作的文件名修改或让我们gcov理解文件名修改方案?

c gcc autotools libtool gcov

8
推荐指数
1
解决办法
708
查看次数

可能未定义的宏:AC_PROG_LIBTOOL

我想构建protobuf,所以我只是在目录中克隆包和cd。当我输入 ./autogen.sh 时,发生了一些错误。 当我输入 ./autogen.sh 时, 我收到回调:

configure.ac:104: error: possibly undefined macro: AC_PROG_LIBTOOL
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: /home/zhangxl/my/autoconf/bin/autoconf failed with exit status: 1
Run Code Online (Sandbox Code Playgroud)

有人说我应该安装 libtool,但我已经安装了 autoconf、automake、libtool 和 m4,但它们都是从源代码构建的,因为我无法获得 sudo 密码。 在此处输入图像描述 这是我的 .bashrc 文件:

export PATH=$PATH:/home/zhangxl/my/libtool/bin
export CPLUS_INCLUDE_PATH=/hpme/zhangxl/my/libtool/include:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=/home/zhangxl/my/libtool/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/home/zhangxl/my/libtool/lib:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

我想可能 .bashrc 文件不正确,所以我想寻求帮助,非常感谢您的回答。

linux autotools libtool

8
推荐指数
3
解决办法
1万
查看次数