2009-04-24 99 views
15

MakefileからLD_LIBRARY_PATH env変数を設定するにはどうすればよいですか?MakefileからLD_LIBRARY_PATHを設定する

私はいくつかのソースコードを共有ライブラリにリンクしています。共有ライブラリは、別の共有ライブラリ(1つ以上)にリンクしています。アプリケーションを構築するためのMakefileは、最初の共有ライブラリについてのみ知っています。

ビルドしたい場合は、次のように指定する必要があります。 #export LD_LIBRARY_PATH=/path/to/the/shared/libs(bash用) これは問題なく動作します。

しかし、私はMakefile自体からやりたいと思います。

答えて

2

私が追加しようとした:明らかに正常に動作します

export LD_LIBRARY_PATH=/path/to/the/shared/libs 

を。

私の/ path/to/the/shared/libsが間違っていたため、エラーが発生しました。

他人がこれに対してやっていることを知っていれば、より良い方法があるでしょうか。

+1

これは間違いないですか?私が理解していることは、あなたがmakefileからそれを行うと、 'LD_LIBRARY_PATH'がこのプロセスと子プロセスに対して定義されますが、' make'を実行したシェルでは定義されないということでした。 – Gauthier

9

はい、「エクスポート」は、使用する正しい指示です。詳細はhereに記載されています。これは、make自体が変数をサブ作成に伝播するのに使用するメカニズムと同じです。欠点は、変数をいくつかのコマンドに選択的に渡すことができず、他のコマンドに渡すことができないことです。

私は考えることができる他の二つのオプションがあります。

  • .EXPORT_ALL_VARIABLESを使うには(どこかでターゲットとして指定)、すべての変数は、サブコマンドの環境にエクスポートされます。
  • コマンドライン上で指定します(あなたはすべての変数に追加再帰のMakefileを持っているので、例えば)あなたはメイクファイル内LD_LIBRARY_PATH変数をエクスポートしたくない場合は、

    foo: 
        EXPORTEDVAR=somevalue gcc $< -o [email protected] 
    
7

あなたをコンパイラとリンカーへのすべての呼び出しにバインドされた状態を保つことができます。

ターゲットルール内のすべてのgccコールとldコールに直接追加します。

my_target: my_target.o 
    LD_LIBRARY_PATH=/my/library/path gcc -o my_target my_target.o 

たり、コンパイラを定義するグローバルメイク変数を設定するには、パス、例えば:

CC=LD_LIBRARY_PATH=/my/library/path gcc 
CPP=LD_LIBRARY_PATH=/my/library/path gcc 
CXX=LD_LIBRARY_PATH=/my/library/path gcc 

私はコンパイラとしてgccのを選びましたが、もちろん、あなたが好きなコンパイラを使用することができますが含まれています。

2

私は同じ問題を抱えていた、私はあなたが行ったようにLD_LIBRARY_PATHをエクスポートする必要がありました:

export LD_LIBRARY_PATH=/path/to/the/shared/libs ; my_command 

私の友人は、以下のセミコロンに気付かない、私にLD_LIBRARY_PATHが唯一のコマンドに適用される代替案を示しました。

LD_LIBRARY_PATH=/path/to/the/shared/libs my_command 

こちらはarticleです。

関連する問題