[解決済み] Makefile からプログラムが存在するかどうかをチェックする
質問
あるプログラムが Makefile から呼び出せるかどうかを調べるにはどうしたらよいでしょうか。
(つまり、プログラムがパスに存在するか、さもなければ呼び出し可能であるべきです)。
例えば、どのコンパイラがインストールされているかをチェックするために使用することができます。
例えば、次のようなものです。 この質問 のようなものですが、基礎となるシェルがPOSIX互換であることを仮定していません。
どのように解決するのですか?
時には、Makefile を異なるターゲット OS 上で実行できるようにする必要があり、 必要な実行形式が
PATH
にない場合、失敗する前に長い時間実行するのではなく、早期に失敗するようにしたい場合があります。
が提供する優れた解決策は エンジニアチュアン を作る必要があります。 ターゲット . しかし、テストする実行ファイルがたくさんあり、Makefile に多くの独立したターゲットがあり、それぞれがテストを必要とする場合、それぞれのターゲットは依存関係としてテストターゲットを必要とします。そのため、一度に複数のターゲットを作成すると、処理時間だけでなく、余分な入力が多くなります。
が提供する解決策は 0xf はターゲットを作ることなく実行可能かどうかをテストすることができます。これは、別々にまたは一緒に構築できる複数のターゲットがある場合、多くの入力と実行時間を節約します。
後者の解決策に対する私の改良点は
which
実行ファイル (
where
が存在することに依存するのではなく、Windowsでは
--version
オプションに依存するのではなく、直接 GNU Make の
ifeq
ディレクティブで新しい変数を定義するのではなく、 GNU Make の
error
関数を使用して、必要な実行形式が
${PATH}
. 例えば、テストするために
lzop
を実行します。
ifeq (, $(shell which lzop))
$(error "No lzop in $(PATH), consider doing apt-get install lzop")
endif
チェックする実行ファイルが複数ある場合、実行ファイルごとに
foreach
関数と
which
を実行します。
EXECUTABLES = ls dd dudu lxop
K := $(foreach exec,$(EXECUTABLES),\
$(if $(shell which $(exec)),some string,$(error "No $(exec) in PATH")))
を使うことに注意してください。
:=
という代入演算子が使われていることに注意してください。これは、RHS 式の即時評価を強制するために必要なものです。もしあなたのMakefileが
PATH
を変更した場合、上記の最後の行の代わりに、次の行が必要になります。
$(if $(shell PATH=$(PATH) which $(exec)),some string,$(error "No $(exec) in PATH")))
このように出力されるはずです。
ads$ make
Makefile:5: *** "No dudu in PATH. Stop.
関連
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】Makefileの中の.PHONYの目的は何ですか?
-
[解決済み] GNU Makefile の変数割り当て =, ?=, :=, += の違いは何ですか?
-
[解決済み] makefile の記号 $@ と $< はどういう意味ですか?
-
[解決済み】makefileに'cd'コマンドを記述するには?
-
[解決済み】コマンドの出力をMakefileの変数に代入する方法
-
[解決済み】makefileでコマンド起動時のエコーを抑止する?
-
[解決済み】makefileでターゲットのリストを取得する方法とは?
-
[解決済み] メイクファイル ifeq 論理的または
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン