8

configure.ac には次の問題があります。

私が使用しなければならないライブラリはいくつかのクレイジーなフォルダにあるので、ライブラリ検索パスを追加したいと思います。私の考えは、オプションでこれを行うことです:

AC_ARG_WITH([cplex-lib-path],
  [AS_HELP_STRING([--with-cplex-libs], [location of the CPLEX library])],
  [CPLEX_LIBS="-L$withval --lcplex"],
  [])

誰かがライブラリパスを指定した場合、もちろんライブラリが見つかるかどうかを確認したいと思います:

AC_CHECK_LIB([cplex], [CPXcreateprob], [],
[
  AC_MSG_ERROR([Could  not find CPLEX library])
])

ただし、CPLEX_LIBS を AC_CHECK_LIB のライブラリ検索パスに追加したいと考えています。これはどういうわけか可能ですか?

4

1 に答える 1

18

ライブラリの場所を構成スクリプトに伝えるのは、ユーザーの責任です。ユーザーが利用できるオプションは多数ありますが、最も一般的なものは次のとおりです。

configure LDFLAGS=-L/p/a/t/h

この点でユーザーに対応するためにメンテナーがビルド スクリプトを変更する理由はまったくなく、何もしようとしない多くの正当な理由があります。(ユーザーとして) ライブラリが多くの場所にあることに気付いた場合は、環境または config.site で LDFLAGS を設定できます。ツールチェーンにはおそらく他のメカニズムがあります (たとえば、gcc を使用している場合は、LIBRARY_PATH を設定するだけです)。autoconf によって提供されるインフラストラクチャは、この問題に対処するためのメカニズムをすでに多数提供しており、パッケージのメンテナーは、車輪を再発明せず、非標準のインターフェースを提供する方が賢明です。

あなたがやろうとしていることをするべきではないと主張したので、それを行う方法を教えてあげましょう。AC_CHECK_LIB は検索に LDFLAGS の値を使用するため、次のことができます。

LDFLAGS="$LDFLAGS $CPLEX_LIBS"     # this is a bug

-lLDFLAGS にフラグがありますが、-l引数は に属しているため、これは間違っていますLIBS。また、別のライブラリ libfoo と $FOO_LIBS が別の場所を指している場合、明確にする方法はまったくありません: LDFLAGS は -L/cplex と -L/foo を取得し、ユーザーはどちらがどれかわかりませんが最初に来て、あるライブラリと他のライブラリとのリンケージを保証することはできません。つまり、CPLEX_LIBS を使用しないでください。LDFLAGS を使用するようにユーザーを教育してください。また、次のように入力すると便利です。

configure LDFLAGS='-Lpath1 -Lpath2' 

入力するよりも

configure --with-cplex=path1 --with-foo=path2

後者は物事を難読化し、教育を受けていない大衆につながります。なぜ人々がビルドに --with-lib=/p/a/t/h オプションを入れるのが好きなのか理解できませんでした: それらは何の役にも立たないのです。

于 2012-04-18T13:27:37.283 に答える