2

이전 질문을 기반으로 빌드 구성을 만드는 중입니다. Build Configurations가 생성되었고, custom.h이라는 파일에 다른 빌드에 대한 조건부 선언이 있습니다. 그것은 현재 다음과 같습니다 .h 파일의 값이 .rc 파일에 정의되어 있지 않습니다.

#if BUILD == 1 
#define STRDESCRIPTION "Personal Edition" 
#elif BUILD == 2 
#define STRDESCRIPTION "Select Edition" 
#elif BUILD == 3 
#define STRDESCRIPTION "Elite Edition" 
#pragma message(STRDESCRIPTION) 
#endif 

내가 로깅으로 #pragma 명령을 추가 :

#pragma once 

#if defined(ELITE_BUILD) 
    #define BUILD 3 // 1: personal, 2: select, 3: elite 
#elif defined(SELECT_BUILD) 
    #define BUILD 2 
#elif defined(PERSONAL_BUILD) 
    #define BUILD 1 
#endif 

내 .RC 파일 중 하나에이 (다소 편집 됨)과 같습니다 versionconfig.h을 위해 포함이 노력. 나는이 프로젝트를 컴파일 할 때

BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040904b0" 
     BEGIN 
      VALUE "FileDescription", STRDESCRIPTION 
     END 
    END 
END 

I 오류 error RC2104 : undefined keyword or key name: STRDESCRIPTION를 얻을 :이 포함되면, .rc 파일의 관련 부분은 (간결성을 위해 편집 됨 조금, 다시) 다음과 같습니다. 나는 약간의 손실이 있습니다. 값은 존재하며, 설정 한 후에 즉시 로그 할 수 있으며 그에 대한 명령은 #undef이 아닙니다.

이 - 수정 됨 - 나는 프로젝트가 컴파일 차단하면 자리가 외부 정의에 추가하는 경우

하지만, 값이 표시되지, 그래서 내 문제는 조건 정의에 관련이있는 것으로 나타납니다. 이 시점에서 가장 혼란스러운 점은 조건부 블록 안에 #pragma message 명령을 넣을 수 있고 올바르게 실행되었지만 거기에 정의 된 값이 존재하지 않는다는 것입니다. 누군가를 바라보며 나를 위해 이것에 대해 밝힐 수 있습니다.

+0

일반적으로 나는 오타를 의심합니다. – Joshua

+0

내가 최근에 가능한 파일을 생성했다면. 그러나 파일의 관련 부분은 꽤 오랜 시간 동안 변경되지 않았습니다. 변경된 유일한 파일은'custom.h'이었고 Build Configurations의 Preprocessor 섹션에 정의 된 변수를 확인했습니다. 'versionconfig.h'와'.rc' 파일은 수정되지 않았습니다. –

답변

3

발견했습니다. Visual Studio에서는 프로젝트와 별도로 리소스 파일에 대한 사전 처리기 정의를 설정해야합니다. 리소스에 대한 프리 프로세서 섹션에 ELITE_BUILD을 추가하자마자 모든 것이 예상대로 작동했습니다.

관련 문제