0

私はメイクファイルが初めてで、単純な C++ 共有ライブラリを書いています。

メイクファイル自体によってライブラリのパスを動的に見つける方法はありますか? 私が欲しいのは次のようなものです:(私のmakefileで)

INCLUDE_DIRS := `which amplex-gui`
LIBRARY_DIRS := `which amplex-gui`

amplex-gui はコードで使用するライブラリであり、その lib と include ディレクトリを makefile に入れる必要があります。各ユーザーが自分のマシンの異なるパスにインストールする可能性があるため、そのパスを動的に把握したいと考えています。したがって、そのパスを見つけるために which コマンド (またはおそらく $PATH 環境変数) を動的に解析するには、makefile が必要です。どうすればこれを行うことができますか?

4

1 に答える 1

1

逆引用符はシェル構文であることを忘れないでください。Make は逆引用符に対して特別なことは何もしません。GNU make を使用している場合は、$(shell which amplex-gui) を使用してバッククォートと同等の動作を得ることができます。

上記のコメントに関して、「ネストコマンド」が何を意味するのか正確にはわかりませんが、make関数$()内でシェルの構文を確実に使用できます。shellただし、展開を行うすべての文字列と同様に、シェルに渡されるようにドル記号を二重にして引用する必要があります。たとえば、次のようになります。

INCLUDE_DIRS := $(shell echo $$(dirname $$(dirname $$(which amplex-gui))))

もちろん、make 関数も使用できます。残念ながら、makedir関数は最後のスラッシュを残すという点で煩わしいため、直接複数回使用することはできません。次のように、そこに patsubst を配置する必要があります。

INCLUDE_DIRS := $(dir $(patsubst %/,%,$(dir $(shell which amplex-gui))))

最後に、十分に新しいバージョンの GNU make がある場合は、abspath関数があるので、次のようにすることができます。

INCLUDE_DIRS := $(abspath $(dir $(shell which amplex-gui))../..)
于 2013-08-03T13:45:03.517 に答える