문제

컴파일 스위치에 따라 (값은 값입니다 COMPILE_A 또는 COMPILE_B)는 환경 변수의 형태로 설정되어 있으며 응용 프로그램 이름 및 스플래시 화면과 같은 다른 설정으로 응용 프로그램을 컴파일하려고합니다.

나는 이것을 멀리했다 :

  1. "Project / Settings / C / C ++ / Prephocessor 정의"에서 나는 추가 $(COMPILESWITCH) (명령 줄 옵션이 나타납니다 /D "$(COMPILESWITCH)").

  2. stdafx.h에서는 다음 코드를 사용할 수 있습니다. 즉, 명령 줄 매개 변수를 통해 전처리 정의를 올바르게 정의했음을 의미합니다.


    #if defined COMPILE_A
    #   define IDB_SPLASH IDB_SPLASH_A
    # elif defined COMPILE_B
    #   define IDB_SPLASH IDB_SPLASH_B
    # else
    #   error Unknown or undefined target compile switch; cannot compile!
    # endif

그러나 "ResourceView / [마우스 오른쪽 버튼 클릭] / 속성"아래의 "조건"속성을 발견했습니다 ... 도움말 텍스트는 다음과 같습니다.

상태

자원의 포함을 결정합니다. 예를 들어, 조건이 _debug 인 경우이 리소스는 디버그 빌드에만 포함됩니다.

이것은 우아한 방법처럼 보입니다.

명시 _DEBUG 조건이 작동합니다. 그래서 _DEBUG 따라서 지정됩니다 /D _DEBUG 나의 $(COMPILESWITCH) 또한 작동해야합니까?
어떤 이유로 든 그렇지 않습니다. 왜요?

아니면 내가 원하는 것을 달성하는 또 다른 더 좋은 방법조차 있습니까?

도움이 되었습니까?

해결책

방금 내 문제를 해결 한 것 같아요 ...

리소스 컴파일러는 자체 전처리기를 사용합니다.
따라서 "프로젝트 / 설정 / 리소스 / 사전 처리기 정의"에 동일한 전처리 정의가 추가되어야합니다.

편집 : 문자열 자원

위의 내용은 "조건"속성이 없으므로 문자열 리소스에는 효과가 없습니다 ...

나는 사용하기로 결정했다 res\<projectname>.rc2 리소스 편집기가 터치하지 않는 사용자 정의 리소스 파일. 내용은 다음과 같습니다

#if defined(COMPILE_A)
    STRINGTABLE DISCARDABLE 
    BEGIN
        IDR_MAINFRAME           "AppTitle A"
    END
#else
#   if defined(COMPILE_B)
    STRINGTABLE DISCARDABLE 
    BEGIN
        IDR_MAINFRAME           "AppTitle B"
    END
#   else
#       error Compile switch not defined or unknown; cannot compile!
#   endif
#endif
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top