我的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)
我怎么能逃脱这些括号?
我正在制作一个使用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) 我有一个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)?
我无法使用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)
我很茫然,我一直在谷歌上搜索一小时......
我在使用交叉编译器链接到许多库时遇到问题.是否可以在每次生成文件时将文件conftest.c转储到安全位置?
我试图取消注释
rm -f conftest
Run Code Online (Sandbox Code Playgroud)
从配置脚本,但它继续,就像它没有任何意义.
问候.我正在尝试创建一个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选项?
我希望我正在处理的项目的可执行文件记录了最新的mercurial变更集,以便当用户抱怨错误行为时,我可以跟踪他们正在使用的版本.我的一些可执行文件是Python,其他的是C编译.有没有办法自动化这个,或者你能指出我展示解决方案的项目吗?
我在我的项目中使用autoconf ...以防止解决方案更容易.
谢谢!
那么setjmp
有了Make,我会做类似的事情
generated.c: input.txt generator
./generator input.txt > generated.c
Run Code Online (Sandbox Code Playgroud)
我如何从autotools中获得相同的功能?(在清洁时删除generated.c也是一个奖励).
我确信这是一个相当简单的问题.我有一个非常简单的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.
我们最近从subversion转移到git,然后转到Github,用于几个开源项目.Github很不错,因为它提供了很多功能.我特别喜欢的一件事是能够下载标签zip
或.tar.gz
文件.
不幸的是,Github最近停止了下载.这应该不是问题,因为能够下载标签.然而,在过去我们没有把Makefile
,configure
脚本或任何其他Autoconf生成的文件到回购,因为他们得到很多的冲突,当人们合并.
处理这个问题的正确方法是什么?
bootstrap.sh
文件,并告诉人们运行该文件?make dist
并将其放入回购中?谢谢