Autoconf附加到输出变量和程序特定LIBS

时间:2013-01-19 15:58:39

标签: autotools autoconf automake

在configure.ac中使用autoconf我需要附加到输出变量。

具体来说,我想为每个程序(Makefile.am中的myprogram1和myprogram2)添加不同的LIBS变量。让我们想象一下myprogram1需要一个-lboost_python而myprogram2需要-losg。

基本上一些程序需要某些库,而其他程序则不需要。这是我正在做的一个例子。当然,AC_SUBST根据我的理解进行了一项任务(= vs + =),因此无效。

AC_CHECK_LIB([boost_python], [main], [AC_SUBST([myprogram1_LIBS], ["-lboost_python"])                      
  AC_DEFINE([HAVE_LIBBOOST_PYTHON], [1], [Define if you have libboost_python])],                  
  [AC_MSG_FAILURE([boost_python library not found])])  
AC_CHECK_LIB([osg], [main], [AC_SUBST([myprogram2_LIBS], ["-losg"])                      
  AC_DEFINE([HAVE_LIBOSG], [1], [Define if you have libosg])],                  
  [AC_MSG_FAILURE([osg library not found])])  

我需要的是使用第一个lib构建myprogram1_SOURCES,并使用第二个lib构建myprogram2_SOURCES。

我可以使用AC_APPEND_SUBST类型的宏吗?和/或有没有更好的方法让我做我需要做的事情来建立不同的程序链接不同的程序?

2 个答案:

答案 0 :(得分:2)

一旦添加了取决于osgboost的myprogram3,您可能会发现将库的检查与其使用分开会更方便。

e.g。仅使用configure来确定存在的内容,并使用Makefile构造正确的编译命令。

e.g。 (configure.ac):

AC_CHECK_LIB([boost_python], [main], [AC_SUBST([BOOST_LIBS], ["-lboost_python"])                      
  AC_DEFINE([HAVE_LIBBOOST_PYTHON], [1], [Define if you have libboost_python])],                  
  [AC_MSG_FAILURE([boost_python library not found])])  
AC_CHECK_LIB([osg], [main], [AC_SUBST([OSG_LIBS], ["-losg"])                      
  AC_DEFINE([HAVE_LIBOSG], [1], [Define if you have libosg])],                  
  [AC_MSG_FAILURE([osg library not found])])  

和(Makefile.am)

myprogram1_LDADD = @BOOST_LIBS@
myprogram2_LDADD = @OSG_LIBS@
myprogram3_LDADD = @BOOST_LIBS@ @OSG_LIBS@

答案 1 :(得分:1)

我认为您的AC_CHECK_LIB来电是正确的(如果他们不这样做,您是否尝试过使用autoconf archive中的宏(特别是AX_BOOST_PYTHON))?我无法相信boost python和osg都提供main

无论如何,要回答问题,你不必一次性提供AC_SUBST'd变量的内容,所以你可以做这样的事情:

myprogram1_LIBS=""
AX_BOOST_PYTHON
myprogram1_LIBS="$myprogram1_LIBS $BOOST_PYTHON_LIB"
# ...
AC_SUBST([myprogram1_LIBS])

P.S。将库添加到程序的变量是LDADD or myprogram1_LDADD