我正在研究GNU/Linux上的C++项目,我正在寻找一种方法来测试IBM Informix库与Autotools的存在性和可用性 - 即编辑configure.in.我没有Autotools的经验,所以基本上我从项目configure.in 等人那里学到了.脚本和复制和更改我认为需要更改的位置.我,我一直在改编现有的文字configure.in.
到目前为止,我一直在成功使用AC_CHECK_LIBin configure.in来测试某个库是否存在且是否可用.但这似乎只适用于具有函数的库,而不是类.也就是说,在测试Informix的libifc++.so库时,这会失败:
AC_CHECK_LIB(ifc++, ITString,
INFORMIX_LIB="-L$INFORMIX_LIB_LOCATION/c++ -lifc++ -L$INFORMIX_LIB_LOCATION -L$INFORMIX_LIB_LOCATION/dmi -L$INFORMIX_LIB_LOCATION/esql -lifdmi -lifsql -lifasf -lifgen -lifos -lifgls -lifglx $INFORMIX_LIB_LOCATION/esql/checkapi.o -lm -ldl -lcrypt -lnsl",
echo "* WARNING: libifc++.so not found!"
INFORMIX_INC=""
INFORMIX_LIB=""
)
Run Code Online (Sandbox Code Playgroud)
我也试过使用其他组合,比如ITString::ITString等.
我没有在Informix的API中找到"纯"函数(即,在C++类中没有上下文的函数).所以我希望AC_CHECK_LIB在这种情况下有一种方法可以使用,或者还有另一种autoconf/ configure.in"命令"用于此特定用途.
提前感谢您的反馈.
我确信这是一个相当简单的问题.我有一个非常简单的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.
我正在学习autotools,并通过一个hello world场景制作它,现在想尝试将一些cppunit测试包装到一个包中并使用autotools构建它.为了构建软件包,必须在系统上安装cppunit.在构建的./configure部分中检查此问题的最佳方法是什么.
我查看了AC_CHECK_LIB,然后查看了有关使用pkg-config的一些信息.我如何在autotools领域中使用pkg-config来检查构建系统中是否存在cppunit,然后添加include和link行.
任何帮助,将不胜感激.谢谢.
史蒂夫
我正在尝试设置我的项目以使用 autotools 构建系统进行分发。但是,当涉及到包含一些额外的库时,我遇到了问题。
我的代码依赖于几个库:
我写的一个(我会叫 libfoo)
一个是第三方(我将称之为 libbar)
Eigen3(这只是头文件)
这些都已经编译并安装在我的 $HOME 目录中。我不需要将它们构建为这个项目的一部分。
我需要的标志是
-std=c++11 (Got this taken care of)
Run Code Online (Sandbox Code Playgroud)
和
-I/path/to/include/libfoo (or libbar, or Eigen3)
Run Code Online (Sandbox Code Playgroud)
和
-L/path/to/lib/ (Where libfoo and libbar reside)
Run Code Online (Sandbox Code Playgroud)
和
-lfoo
Run Code Online (Sandbox Code Playgroud)
编译和链接 libfoo 和 libbar
问题是我想设置检查 libfoo 和 libbar 及其标头的存在(我已经检查了 Eigen3 设置)。问题是像 AC_CHECK_HEADERS 和 AC_CHECK_LIB 这样的宏似乎不想包含所需的 CPPFLAGS 或 LDFLAGS,无论我如何尝试定义它们,因此配置步骤失败。
AC_LANG_PUSH([C++])
AC_CHECK_HEADERS([libfoo/foo.h], , [echo "Did not find libfoo headers"; exit -1])
AC_LANG_POP([C++])
Run Code Online (Sandbox Code Playgroud)
阅读 config.log 显示 configure 正在尝试使用
g++ -std=c++11 (other flags...)
Run Code Online (Sandbox Code Playgroud)
但由于缺少上述标志而失败(错误是“找不到 Eigen3/dense”或类似的,表明缺少 -I 标志)
我是 autotools 的新手,所以我可能会遗漏一些明显的东西,但我已经阅读了大量的帮助和手册,但到目前为止还没有弄清楚我需要做什么来设置它。 …