コマンドの標準終了ステータスをメイクファイルの変数に保存しようとしていますが、その方法がわかりません。
私はこれを試しました:
pruebas:
@A= $(ls)
...しかし、それは機能しません。
$(Shell command)
構文を使用して、Makefileからシェルでコマンドを実行できます。たとえば、bashでls
コマンドのステータスを終了する場合は、次のように入力します。
ls --qwfpgjl > /dev/null 2>&1 ; echo $?
これには何らかの説明が必要な場合があります。> /dev/null 2>&1
部分は標準出力と標準エラーの両方を/ dev/nullにリダイレクトするため、出力は表示されず、「echo $?」最後のコマンドの終了ステータスを出力します。コマンドラインでこれを試して、それがあなたのために働くかどうかを見ることができます、例えば
ls --qwfpgjl > /dev/null 2>&1 ; echo $?
あなたに与えるべきです
2
それはエラーであるため、ls
は不明な引数があるときに返されます( ls
manページ を参照)。
これをMakefileに含める方法は?行を追加するだけです
A=$(Shell ls > /dev/null 2>&1 ; echo $$?)
makefileに。 $
の余分な$$?
に注意してください。$?
はMakefileの変数ではないことをmake
に伝えます。
それはそれであるはずです!ここで、この動作をテストするために使用したMakefileを見ることができます。
#Shell := /bin/bash
A=$(Shell ls > /dev/null 2>&1 ; echo $$? )
test:
@echo $A
.PHONY: test
注:make
はデフォルトで/bin/sh
シェルを選択しますが、設定することでこれをオーバーライドできます
Shell := /bin/bash
これは、/bin/sh
で実行されないより複雑なコマンドに役立ちます。