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 を最初の lib でビルドし、myprogram2_SOURCES を 2 番目の lib でビルドすることです。

使用できる AC_APPEND_SUBST タイプのマクロはありますか? または、さまざまなライブラリがリンクされているさまざまなプログラムを構築するために必要なことを行うためのより良い方法はありますか?

4

2 に答える 2

2

osg両方に依存する myprogram3 を追加するboostと、ライブラリのチェックをその使用法から切り離した方が便利な場合があります。

たとえばconfigure、そこに何があるかを判断するためだけに使用Makefileし、適切なコンパイル コマンドを構築するために使用します。

例 (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@
于 2013-01-21T09:10:13.453 に答える
1

あなたのAC_CHECK_LIB呼び出しなどは正しいことをしていると思います (そうでない場合は、autoconf アーカイブ(具体的にはAX_BOOST_PYTHON) のマクロを使用してみましたか?)。ブースト python と osg の両方が提供するとは信じられませんmain

とにかく、尋ねられたように質問に答えるために、AC_SUBST'd変数の内容を一度に提供する必要はないので、次のようなことができます:

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

PS プログラムにライブラリを追加する変数はLDADDまたはmyprogram1_LDADDです。

于 2013-01-19T22:49:36.747 に答える