1

私は autoconf を使用する最初のプロジェクトを書いており、それを独学で教えています。ほとんどの場合、物事は非常にうまくいっています。最後に重要なハードルが 1 つあります。システムごとに名前が異なる可能性があるライブラリ ファイルとヘッダー ファイルを見つけるのに苦労しています。

たとえば、Mozilla の SpiderMonkey でコンパイルする必要があります。ソースからコンパイルすると、SpiderMonkey は libjs.so になります。ただし、私の Linux バリアントでは、SpiderMonkey は libmozjs.so としてインストールされます。これは同じライブラリですが、名前が異なるだけで、リンカー フラグが異なります。

ライブラリの名前を検出する適切な方法はありますか? デフォルトを「js」にして、それをオーバーライドする構成オプションを指定するだけですか?

ヘッダーファイルでも同じ状況があります。SpiderMonkey のヘッダー ファイルは、私のオペレーティング システムの /usr/include/mozjs/ にインストールされています。他のシステムでは、/usr/include/js/ または単に /usr/include/ になると確信しています。適切なヘッダー ファイルの場所を見つけるにはどうすればよいですか? バニラの「検索」を行うのは遅く、ファイルの間違ったコピーを見つける可能性があるため、躊躇していました(たとえば、 /usr/include/ ではなくユーザーのホームディレクトリでファイルを検索します)。

4

3 に答える 3

2

AC_TRY_LINK(ループありまたはなし)は不必要に冗長です。たとえば、次のレシピを見てください。

LIBS=""
AC_SEARCH_LIBS([spidermonkey_init], [mozjs js], [sp_libs="$LIBS"; LIBS=""], [])
于 2012-05-16T16:25:56.230 に答える
1

パス/名前を明示的に指定するオプションを追加することに加えて、よく知られている名前または場所がいくつかある場合は、次のようなものを使用して、成功するまで順番に試すことができます。

 AC_TRY_LINK([#include "mpi.h"],[MPI_Init(0, 0);], [mpi_link="yes"], [mpi_link="no"]);

または、単にテストを使用します。以下を使用して、実際にビルドされたブースト ライブラリをピックアップしましたが、名前がわずかに異なる可能性があります。

for lib in "date_time" "filesystem" "regex" "unit_test_framework" "signals"; do
    if test -f ${$1_libdir}/libboost_$lib-gcc$boost_thread_flag.a; then
      BOOST_LIBS="$BOOST_LIBS -lboost_$lib-gcc$boost_thread_flag"
    elif test -f ${$1_libdir}/libboost_$lib-gcc$boost_thread_flag-s.a; then
      BOOST_LIBS="$BOOST_LIBS -lboost_$lib-gcc$boost_thread_flag-s"
    elif test -f ${$1_libdir}/libboost_$lib$boost_thread_flag.a; then
      BOOST_LIBS="$BOOST_LIBS -lboost_$lib$boost_thread_flag"
    elif test -f ${$1_libdir}/libboost_$lib.a; then
      BOOST_LIBS="$BOOST_LIBS -lboost_$lib"
    fi
done
于 2009-01-21T15:54:12.890 に答える
0

私はオプションで行きます:--with-spidermonkey-library= --with-spidermonkey-include=

オプションが指定されていない場合は、デフォルト/検索を配置します。(たぶんデフォルトだけ)

于 2009-01-21T14:58:10.897 に答える