web-dev-qa-db-ja.com

Makefile If-Then Elseおよびループ

Make-Filesでif-thenステートメントとforループを使用する方法を誰かが説明できますか?例のある良いドキュメントを見つけることができないようです。

56
GavinR

条件付きフォーム

シンプル

conditional-directive
text-if-true
endif

やや複雑

conditional-directive
text-if-true
else
text-if-false
endif

より複雑

conditional-directive
text-if-one-is-true
else
conditional-directive
text-if-true
else
text-if-false
endif
endif

条件付きディレクティブ

等しい構文

ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"

等しくない場合の構文

ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2"

定義された構文の場合

ifdef variable-name

定義されていない場合の構文

ifndef variable-name  

foreach関数

foreach関数の構文

$(foreach var, list, text)  

foreachセマンティクス
「リスト」内の空白で区切られた各Wordに対して、「var」という名前の変数がそのWordに設定され、テキストが実行されます。

61
John Mulder

以下に例を示します。

ifeq ($(strip $(OS)),Linux)
        PYTHON = /usr/bin/python
        FIND = /usr/bin/find
endif

これには、異なるバージョンのMakeの構文がわずかに異なるという警告の言葉が付いていることに注意してください。

16
Mark Roddy

GNU make documentation を試しましたか?例付きの条件に関するセクション全体があります。

8
Jeremy Ruten

多くの場合forループが表示されますが、通常は必要ありません。シェルに頼らずにforループを実行する方法の例を次に示します

LIST_OF_THINGS_TO_DO = do_this do_that 
$(LIST_OF_THINGS_TO_DO): 
       run $@ > [email protected]

SUBDIRS = snafu fubar
$(SUBDIRS):
     cd $@ && $(MAKE)
4
Kramer