标签: autoconf

如何在autoconf/m4中转义文本?

我的configuration.ac文件中的以下代码不起作用(请注意嵌套方括号[default = no]):

AC_ARG_ENABLE(debug,
    [  --enable-debug          build with debugging support [default=no].],
    [DEBUG="$enableval"],
    [DEBUG="no"]
)
Run Code Online (Sandbox Code Playgroud)

我怎么能逃脱这些括号?

bash autoconf m4

11
推荐指数
3
解决办法
3683
查看次数

提升和自动提供

我正在制作一个使用Autoconf的项目.我有以下内容configure.ac:

AC_CHECK_HEADERS([boost/foreach.hpp], [],
    [AC_MSG_ERROR(You need the Boost libraries.)])
Run Code Online (Sandbox Code Playgroud)

当我运行时configure,它说它找不到这个头文件:

checking boost/foreach.hpp usability... no
checking boost/foreach.hpp presence... no
checking for boost/foreach.hpp... no
configure: error: You need the Boost libraries.
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我有Boost.如果我删除了检查,代码编译,我安装了Boost:

$ find /usr/include -name foreach.hpp
/usr/include/boost/foreach.hpp
/usr/include/boost/test/utils/foreach.hpp
Run Code Online (Sandbox Code Playgroud)

请注意,我对SDL做了完全相同的工作.

AC_CHECK_HEADERS([SDL/SDL.h], [],
    [AC_MSG_ERROR(You need the SDL development library.)])
Run Code Online (Sandbox Code Playgroud)

...

checking SDL/SDL.h usability... yes
checking SDL/SDL.h presence... yes
checking for SDL/SDL.h... yes
Run Code Online (Sandbox Code Playgroud)

linux autoconf boost

11
推荐指数
3
解决办法
6086
查看次数

如何用automake编译同一程序的MPI和非MPI版本?

我有一个C++代码,可以使用MPI支持编译,具体取决于某个预处理器标志; 缺少相应的标志,源编译为非并行版本.

我想设置的Makefile.am,以便它编译双方的MPI并行串行版本,如果选项 ./configure中给出.

这是一个问题:MPI有自己的C++编译器包装器,并坚持使用它而不是标准C++编译器编译和链接源代码.如果我自己编写Makefile,我必须做这样的事情:

myprog.seq: myprog.cxx
    $(CXX) ... myprog.cxx

myprog.mpi: myprog.cxx
    $(MPICXX) -DWITH_MPI ... myprog.cxx
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉automake在编译MPI启用的程序版本时必须使用$(MPICXX)而不是$(CXX)?

automake autoconf mpi

11
推荐指数
2
解决办法
3681
查看次数

使用Autoconf对ARM进行交叉编译

我无法使用autconf为我的arm板交叉编译库.

我正在使用这一行:

./configure --target=arm-linux --host=arm-linux --prefix=/bla/bla/bla/linux_arm_tool CFLAGS='-m32'
make
make install
Run Code Online (Sandbox Code Playgroud)

当我做file检查时,我得到:

libjpeg.so.8.4.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped
Run Code Online (Sandbox Code Playgroud)

这看起来根本不对,但无论如何我都尝试使用它......我得到:

/usr/lib/gcc/arm-linux-gnueabi/4.5.3/../../../../arm-linux-gnueabi/bin/ld: skipping incompatible /bla/bla/bla/bla/../linux_arm_tool/lib/libjpeg.so when searching for -ljpeg
Run Code Online (Sandbox Code Playgroud)

我很茫然,我一直在谷歌上搜索一小时......

c autoconf cross-compiling

11
推荐指数
2
解决办法
4万
查看次数

如何转储conftest.c?

我在使用交叉编译器链接到许多库时遇到问题.是否可以在每次生成文件时将文件conftest.c转储到安全位置?

我试图取消注释

rm -f conftest
Run Code Online (Sandbox Code Playgroud)

从配置脚本,但它继续,就像它没有任何意义.

autoconf dump

11
推荐指数
1
解决办法
5373
查看次数

autoconf with -pthread

问候.我正在尝试创建一个autoconf配置脚本,它自动检查要使用哪个pthread选项,理想情况下,在使用gcc编译时指定-pthread.

我希望AX_PTHREAD能够正常工作,但似乎都不适用于MacOS 10.6.

我正在使用来自http://www.nongnu.org/autoconf-archive/ax_pthread.html的 AX_PTHREAD

由于我不理解的原因,它只是不使用-pthread选项来构建在mac上的脚本.

问题似乎是"none"正在编译而没有错误,因此ax_pthread_flags变量中的其他线程未被检查.

所以我在"无"情况之前移动了-pthread案例并将此案例添加到case语句中:

        -pthread)
        PTHREAD_CFLAGS="-pthread"
        PTHREAD_LIBS="-pthread"
        ;;
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但我不确定它是否适用于非GCC编译器.我甚至不确定我是否应该关心.

同样令人烦恼的是AX_PTHREAD宏只更新CFLAGS,而不更新CPPFLAGS.

有没有更好的方法来使用autoconf测试-pthread选项?

autoconf pthreads

10
推荐指数
1
解决办法
4057
查看次数

将mercurial changeset注入C可执行文件中的版本信息

我希望我正在处理的项目的可执行文件记录了最新的mercurial变更集,以便当用户抱怨错误行为时,我可以跟踪他们正在使用的版本.我的一些可执行文件是Python,其他的是C编译.有没有办法自动化这个,或者你能指出我展示解决方案的项目吗?

我在我的项目中使用autoconf ...以防止解决方案更容易.

谢谢!

那么setjmp

c autoconf revision version changeset

10
推荐指数
2
解决办法
1429
查看次数

使用autotools构建时如何生成源文件

有了Make,我会做类似的事情

generated.c: input.txt generator
    ./generator input.txt > generated.c
Run Code Online (Sandbox Code Playgroud)

我如何从autotools中获得相同的功能?(在清洁时删除generated.c也是一个奖励).

automake autoconf makefile autotools

10
推荐指数
1
解决办法
3774
查看次数

使用pkg-config宏PKG_CHECK_MODULES失败

我确信这是一个相当简单的问题.我有一个非常简单的configure.ac文件,我正在使用它来了解autoconf和pkg-config如何协同工作.该confgure.ac文件看起来像:

AC_PREREQ(2.61)
AC_INIT(autoconf_test, 1.0, nowhere@dev.null)

PKG_CHECK_MODULES(libusbmuxd, libusbmuxd >= 0.1.4)
Run Code Online (Sandbox Code Playgroud)

然后我可以从命令行执行autoconf,它确实生成了一个配置脚本.但是,当我运行配置脚本时,我收到以下错误:

./configure: line 1618: syntax error near unexpected token `libusbmuxd,'
./configure: line 1618: `PKG_CHECK_MODULES(libusbmuxd, libusbmuxd >= 0.1.4)'
Run Code Online (Sandbox Code Playgroud)

如果我使用命令行中的pkg-config程序检查它是否可以找到此库,则会成功.

/usr/lib/pkgconfig $pkg-config --libs --cflags --modversion libusbmuxd

1.0.7
-I/usr/local/Cellar/usbmuxd/1.0.7/include  -L/usr/local/Cellar/usbmuxd/1.0.7/lib -lusbmuxd  
Run Code Online (Sandbox Code Playgroud)

所以,似乎很清楚,由于某种原因,PGK_CHECK_MODULE无法定位宏,我不知道为什么.

这可能不是特定于操作系统,但我使用的是Mac OS X 10.6.8.

macos automake autoconf pkg-config osx-snow-leopard

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

我应该在github存储库中包含configure和makefile吗?

我们最近从subversion转移到git,然后转到Github,用于几个开源项目.Github很不错,因为它提供了很多功能.我特别喜欢的一件事是能够下载标签zip.tar.gz文件.

不幸的是,Github最近停止了下载.这应该不是问题,因为能够下载标签.然而,在过去我们没有把Makefile,configure脚本或任何其他Autoconf生成的文件到回购,因为他们得到很多的冲突,当人们合并.

处理这个问题的正确方法是什么?

  • 我应该在回购中放置autoconf和automake生成的文件,以便人们可以直接下载标签吗?
  • 或者应该有一个bootstrap.sh文件,并告诉人们运行该文件?
  • 或者我应该做一个make dist并将其放入回购中?

谢谢

automake autoconf software-distribution github

10
推荐指数
2
解决办法
2139
查看次数