条件がある場合 Makefile サブシェル

条件がある場合 Makefile サブシェル

だから私は次のコードを持っています:

.PHONY: test
test:
ifeq ($(grep -Fxq "substring" ./file && echo 1 || echo 0), 1)
    //do something
else
    //do other thing
endif

アイデアは、ファイル内の部分文字列を見つけると何かをすることですが、私の条件は決して機能しません。 subshel​​l コマンドは独立して実行でき、部分文字列が見つかった場合は期待どおりに 1 を返します。これで、makeファイルにbash if式を簡単に入れることができることがわかりましたが、makeファイル自体の条件を使用したいと思います。

どのアイデアが間違っている可能性がありますか?

ベストアンサー1

grepにはそのような機能はありませんmake。ただし、関数を使用して外部バイナリを呼び出すことはできますshell

.PHONY: test
test:
ifeq ($(shell grep -Fxq "substring" ./file.txt && echo 1 || echo 0), 1)
    echo Yes
else
    echo No
endif

もう一度覚えておくべきことは、makeレシピ(または機能)を処理するためにbash(またはksh、zsh、any-other-sh)​​を使用しないでくださいshell。シェルインタプリタは最も原始的なインタプリタです。sh具体的には、make独自のSHELL変数(通常は/ bin / sh)を読みます。

おすすめ記事