59

Makefile で if-then ステートメントと for ループを使用する方法を誰か説明できますか? 例を含む適切なドキュメントが見つからないようです。

4

4 に答える 4

67

条件付きフォーム

単純

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 セマンティクス
「list」内の空白で区切られた単語ごとに、「var」で指定された変数がその単語に設定され、テキストが実行されます。

于 2008-10-07T23:28:12.943 に答える
19

以下に例を示します。

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

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

于 2008-10-07T23:02:19.487 に答える
7

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

于 2008-10-07T22:59:57.697 に答える
5

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

LIST_OF_THINGS_TO_DO = do_this do_that 
$(LIST_OF_THINGS_TO_DO): 
       run $@ > $@.out

SUBDIRS = snafu fubar
$(SUBDIRS):
     cd $@ && $(MAKE)
于 2011-05-05T05:36:30.190 に答える