문제

나는 여기에 갇혀있다. 우리는 두 개의 makefiles를 가지고 있습니다 (변경할 수없는 요구 사항)

  • 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

그러나 자동 변수 확장이 조건부 내에서 지원되지 않기 때문에 이것은 작동하지 않습니다. 다른 방법이 있습니까?

도움이 되었습니까?

해결책

나는 보통 활용합니다 조건부 기능:

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

또는 사용 호출 기능 내 기능을 정의하려면 :

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

%.o: src/$$(notdir %).c
    @cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top