5

私はここで立ち往生しています。2つのmakefileがあります(変更できない要件)

  • defs.mk:ソースファイル名とそれらの追加のコンパイルフラグ(標準フラグを除く)が含まれています。例:
C_FILES = c / src / main / rule_main.c
rule_main_OPTIONAL_FLAG = + w127
rule_main_DEBUG = TRUE
  • Makefile:すべてのルールが含まれています。

次に、次のようにファイル固有のフラグ(およびオプションのファイル固有のデバッグフラグ)を定義できるように、機能を追加します。

CUSTOM_DEBUG_FLAG = $($(basename $(notdir $@))_DEBUG) ## rule_main_DEBUG macro from defs.mk
ifeq ($(CUSTOM_DEBUG_FLAG),TRUE)
  do something
endif

ただし、条件内では自動変数の展開がサポートされていないため、これは機能しません。それを行う他の方法はありますか?

4

1 に答える 1

5

私は通常、条件関数を利用します:

SPECIFIC_FLAGS=$(if $(findstring $(CUSTOM_FLAG),TRUE),$(IF_TRUE),$(IF_FALSE))

または、call関数を使用して独自の関数を定義します。

debug_defs=$(if $(findstring $(1),file1 file2),-DDEBUG,-DNDEBUG)

%.o: src/$$(notdir %).c
    @cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))
于 2009-05-04T11:51:35.400 に答える