バイナリは obj に依存し、obj は .c ファイル (C プロジェクトを想定) に依存することがわかっています。たとえば、env.mk ファイルがあるとします。このファイルには、「export NO_DISPLAY=YES」のようなフラグがあります。メインの Makefile には、次のものがあります。
ifeq ($(NO_DISPLAY),YES)
CFLAGS += -D__DISPLAY_DISABLE
endif
明らかに、env.mk はメインの make ファイルに含まれています。いつでも、フラグ値「NO_DISPLAY」を変更します。メイクファイルが実行可能ファイルを再構築することはありません。ただし、.o ファイルが削除された場合も同じように機能します。その背後にある理由は、.c、.h ファイルに依存していることを理解しています。.c .h ファイルは変更されないため、makefile は無視して再構築します。ただし、CFLAGS の値が変更された場合は、makefile にコードを再構築してもらいたいと考えています。どうすればいいですか?オブジェクトを削除して再構築したくないことに注意してください。
target_dbg: $(patsubst ./src/%.c,./obj_dbg/%.o,$(wildcard ./src/*.c))
@echo "Target main rule__dbg $(NPROCS)"
$(CC) $(patsubst ./src/%.c,./obj_dbg/%.o,$(wildcard ./src/*.c)) $(LIBS) -o gif_dbg
./obj_dbg/%.o: ./src/%.c ./include/*.h
@echo "I am called first..dbg"
@mkdir -p ./obj_dbg
#$(CC) $(CFLAGS) -E $<
$(CC) $(CFLAGS) $(LDFLAGS) -DDEBUG -c $< -o $@
どんな助けでも大歓迎です。