web-dev-qa-db-ja.com

makefile変数に標準の終了ステータスを割り当てます

コマンドの標準終了ステータスをメイクファイルの変数に保存しようとしていますが、その方法がわかりません。

私はこれを試しました:

pruebas:
    @A= $(ls)

...しかし、それは機能しません。

1
Motumbo

$(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で実行されないより複雑なコマンドに役立ちます。

4
Gerhard Burger