2011-08-08 14 views
0

私はマルチプラットフォームCプログラムで作業しています。 makefileは、各マシン上の異なるコンパイラ、ライブラリの場所などのためにかなり複雑になっています。私はAutoconf/Automakeが良い解決策になると考えましたが、これらのツールを使った私の以前の経験は最小限でした。automakeとリンクするために本当にライブラリの場所を指定する必要がありますか?

私のMakefile.amには、LIBS=-lX11という行がありますが、リンクはエラー"/usr/bin/ld: cannot find -lX11"で失敗します。私はの定義に"-L/usr/X11R6/lib/"を追加することでこれを回避できますが、本当にそれを行う必要がありますか?私は./configureを実行すると、それは言う:Automakeはどこそれを見つけるために知っておくべきことのように

checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include

だからそれはそう。 X11 libsは各マシンの別の場所に置かれるため、ハードコードすることなくMakefile.amに位置を参照できる方法はありますか?

答えて

1

あなたのMakefile.amはLIBSを設定すべきではありません。ライブラリにリンクする必要がある場合、configure.acはライブラリのチェックを含める必要があり、configureスクリプトはそれに従ってLIBSを設定します。また、Makefile.amはライブラリへのパスを指定すべきではありません。各システムは、プリコンパイラがヘッダーを検出し、リンカがライブラリを検出できるように構成する必要があります。リンカーがライブラリを見つけることができるようにシステムが設定されていない場合、正しい解決策は、ユーザーがMakefile.amで何かをハードコードするのではなく、LDFLAGSで場所を指定することです。 (たとえば、Makefileに-L/p/a/t/hを追加するのではなく、LDFLAGS = -L/p/a/t/hをconfigureの呼び出しに追加する必要があります)。

+0

ありがとうございます。私はそこにAC_CHECK_LIB(X11、XOpenDisplay)を持っていましたが、コンパイルされないときには、私はchangings LIBSで修正しようとしました。 ./configureがX11ライブラリ内のXOpenDisplay関数を見つけることができないと言ったことを私は見落としてしまった。それはおそらくここで本当の問題です。 – Tom

関連する問題