ソースコードをビルドした後にアクションを実行できるinstall
セクションを含むMakefileがあります。make install
このinstall
セクションには、2行のシェルコマンドが含まれています。
install: /usr/local/lib
cp $(LIB_OBJ) $<
export LD_LIBRARY_PATH=$<
したがって、最初の行はlibxxx.soをコピーし、2行目は最終実行可能ファイルがlibxxx.soファイルを見つけることができるように環境/usr/local/lib
変数を設定します。LD_LIBRARY_PATH
/usr/local/lib
ただし、make install
コマンドラインから実行した場合は、次のように入力します。
echo $LD_LIBRARY_PATH
予想されるコンテンツの代わりに空のコンテンツが表示されます/usr/local/lib
。それでは、Makefileの2番目のコマンドラインはなぜ実行されないのですか?
ベストアンサー1
make
ほぼ確実に2行のコマンドが実行されています。ただし、その行export LD_LIBRARY_PATH=$<
(またはmake
それを拡張するすべての項目)は、このプロセスの子としてシェルによって実行されますmake
。と入力すると、echo $LD_LIBRARY_PATH
環境変数LD_LIBRARY_PATHのすべての内容が取得されます。シェルは、「エクスポート」を実行せずにこれを実行するサブプロセスですmake
。ファイルまたは別のファイルにエクスポートするか、手動で入力する必要があり.bashrc
ます.zshrc
。