2014-03-31 1 views
1

나는 makefile로 C++ 프로젝트를 만들고있다. 몇 가지 수정을해야하지만 그 전에는 플래그가 GNU make에서 해석되는 방식에 대해 질문이 있습니다.플래그가 설정되었는지 GNU make가 어떻게 이해합니까?

#ifdef FEATURE_DISABLED 
     //Don't invoke the functions for the feature 
    #else 
     //Invoke the functions for the feature 
    #endif 
: 다음 코드에서, 정교하게하기 위해, 나는
# Two options for a feature: 
     FEATURE=on off 

    # other lines in the make file 

    # By default, the feature is turned off 
     ifndef FEATURE 
     FEATURE = off 
     endif 

    # other lines in the make file 

    # A number of other flags are defined here 

    # I have defined a flag to indicate that my feature is disabled 
    CXXFLAGS_off = -DFEATURE_DISABLED 

    # Adding all the flags 
    CXXFLAGS += $(CXXFLAGS_$(FEATURE)) #Other flags also added 

지금 어딘가에 내 코드에서, 나는이 줄을 활성화하거나 내 프로젝트의 컴파일하는 동안 기능을 사용하지 않으려면이 옵션을 사용할 수 있습니다

컴파일하는 동안, 필자가 FEATURE = on이라고 말하면 프로그램이 잘 작동하고있는 것을 볼 수 있습니다. make FEATURE = off라고 말하면 비활성화됩니다.

그러나 내 문제는 컴파일러가 내 선택을 어떻게 해석하고 있는지 정확히 이해하지 못한다는 것입니다. 예를 들어, "FEATURE = off"라고 말하고 있는데,이 라인은 off 플래그가 활성화되어 있고 코드가 기능을 해제하고 컴파일되는 방식은 무엇입니까? 위에서 쓴 것처럼 CXXFLAGS에 내 기능의 플래그를 추가하지만 FEATURE = 해제는 FEATURE_DISABLED 플래그가 설정되었음을 어떻게 이해합니까?

설명해 주셔서 감사합니다.

답변

4

당신은 make 명령 행에 FEATURE = off를 제공 할 때 당신은 또한

CXXFLAGS_off = -DFEATURE_DISABLED 

를 정의하기 때문에

CXXFLAGS += $(CXXFLAGS_$(FEATURE)) 

이있는,

CXXFLAGS += $(CXXFLAGS_off) 

로 확장됩니다 썼다 때문에 차례로

01로 확장됩니다.
CXXFLAGS += -DFEATURE_DISABLED 

즉, 컴파일러는 -DFEATURE_DISABLED을 추가 인수로 사용하여 실행됩니다.

관련 문제