1

在 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])])  

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

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

4

2 回答 2

2

一旦添加了依赖于两者的 myprogram3,osgboost可能会发现将库的检查与它们的使用分开会更方便。

例如configure,仅用于确定存在什么,并用于Makefile构造正确的编译命令。

例如(配置.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@
于 2013-01-21T09:10:13.453 回答
1

我假设你的AC_CHECK_LIB电话和这样的事情是正确的(如果他们没有,你是否尝试过使用autoconf 存档中的宏(特别是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])

PS 将库添加到程序的变量是LDADDmyprogram1_LDADD

于 2013-01-19T22:49:36.747 回答