0

変更したいやや複雑なメイクファイルがあり、メイクについてよく知りません。

BUILD_TYPE = SERVER

BAS_CSRC = a.c \
           b.c \
           c.c

私がやりたいことは、条件付きで BAS_CSRC に次のように追加することです。

ifeq ($(BUILD_TYPE), SERVER)
USR_CSRC    =  $(BAS_CSRC) \
           d.c \
           e.c
endif

all_csrc     =  $(USR_CSRC) $(foreach var, $(COMMON_OBJECTS), $($(var)_csrc))

しかし、コンパイルすると dc と ec が無視されるため、ifeq は失敗します。なんで?引用はどうですか?

4

1 に答える 1

0

ここに入力した内容に基づいて、動作するはずです (これをカット アンド ペーストして、動作するテスト makefile にしました)。これは、実際の環境でこの例とは異なる何かがあることを意味します。変数をどこで使用しているか教えていただけますall_csrcか? 変数の割り当てではなく、それが問題なのかもしれません。

末尾の空白がないことを確認してください。変数と値の大文字と小文字が一致していることを確認してください (すべての UNIX ツールと同様に、make は大文字と小文字を区別します)。メイクファイルにステートメントを追加してみると、$(info ...)何をしているかが表示されます。1 つを の中に入れifeqて発火するendifかどうかを確認し、 の後に の値を確認しますUSR_CSRC

また、一般に、if ステートメントや のような関数呼び出しに空白を追加することはお勧めできませんforeach。上記の状況では問題にはなりませんが、一般的には避けるのが最善です。

于 2013-05-13T13:44:54.523 に答える