2015-01-20 4 views
2

나는 응용 프로그램을 만들었고 두 개의 separete build를 만들어야한다. 하나는 32 비트 용이고 다른 하나는 64 비트 용입니다. 파일 속성에서 원래 파일 이름과 같은 몇 가지 설명을 포함하고 싶습니다. 여기서 아키텍처 (x64 또는 x86)를 설정하고 싶습니다. 생각보다 어렵거나 뭔가 잘못하고있는 것처럼 보입니다.이 매크로가 잘못 평가되는 이유는 무엇입니까?

#ifdef _WIN64 
    #define ARCHIT "1" 
#else 
    #define ARCHIT "2" 
#endif 

이 매크로는 항상 2를 반환합니다. 잘못된 것이 있습니까? 내가 #pragma message을 넣기 전에 define이 올바르게 표시되면 올바르게 평가되지만 어떻게 든 파일 속성에 쓰여지는 텍스트는 항상 2가됩니다.

나를 도와 줄 수 있습니까?

감사합니다.

업데이트 :

이것은 내가 그것을 사용하는 방법입니다 : 코멘트에서

#define VER_FILEVERSION    1,0,0,0 
#define VER_FILEVERSION_STR   "1.0.0.0\0" 

#define VER_PRODUCTVERSION   1,0,0,0 
#define VER_PRODUCTVERSION_STR  "1.0.0.0\0" 


1 VERSIONINFO 
FILEVERSION  VER_FILEVERSION 
PRODUCTVERSION VER_PRODUCTVERSION 
FILEFLAGSMASK 0x17L 
#ifdef _DEBUG 
FILEFLAGS 0x1L 
#else 
FILEFLAGS 0x0L 
#endif 
FILEOS 0x4L 
FILETYPE 0x1L 
FILESUBTYPE 0x0L 
BEGIN 
BLOCK "StringFileInfo" 
BEGIN 
    BLOCK "040904b0" 
    BEGIN 
     VALUE "FileDescription", "My Description" 
     VALUE "FileVersion", VER_FILEVERSION_STR 
     VALUE "InternalName", BASENAME 
     VALUE "LegalCopyright", "My company" 
     VALUE "OriginalFilename", ARCHIT 
     VALUE "ProductName", BASENAME 
     VALUE "ProductVersion", VER_PRODUCTVERSION_STR 
    END 
END 
BLOCK "VarFileInfo" 
BEGIN 
    VALUE "Translation", 0x409, 1200 
END 
END 
+3

매크로는 아무것도 "반환"하지 않습니다. 어떻게 사용하고 있는지 보여주세요. 여러분의 관찰을 보여주는 두 줄의 main()입니다. – WhozCraig

+0

@WhozCraig. 내 질문을 업데이트했습니다. 이것은 내가 그것을 사용하는 방법입니다. – kampi

+1

BEGIN, BLOCK, END, VALUE? 이 태그가 C 인 이유는 무엇입니까? – Jens

답변

0

모두에게 감사하지만 나를 위해, 이것은 Solution이었습니다. 나는 그것이 가장 단순하다고 생각한다.

는 업데이트 :

자세한 설명, 경우에 링크가 작동하지 않습니다 :

1. Open your project in Visual Studio. 
2. Right click on resource script file (e.g. app.rc) and select "Properties" 
3. At the top of the property page, select one platform like "Win32" or 
"x64". 
4. In the left menu bar, select [Configuration Properties]/[Resources]/
[General]. 
5. In the "Preprocessor Definitions" field, add "WIN32" for "Win32" 
platform and "WIN64" for "x64" platform. The field value will become " 
WINXX;_UNICODE;UNICODE". (XX will be 32 or 64) 
6. Click OK to close the window. 
7. Right click on resource script file (e.g. app.rc) and select "View Code". 
8. In the code editor, add #ifdef and #elif to conditionally include 
resources when compiling. 
+0

답변을 주셔서 감사합니다. 해결책을 찾을 수있는 링크를 제공했는데 무엇을 투표해야합니까? 나, 단 하나 내가 올렸습니다.그들의 노력에 감사하는 사람들은 나쁘지 않습니까? 아니면 내가 모든 것에 투표해야합니까? – kampi

1

및 MSDN에서이 RC 스크립트에서 미리 정의 된 매크로 RC_INVOKED 것 같다. 따라서 RC 스크립트를 자동화 할 수 없습니다. 그러나 T4 text templates과 그 .tt 스크립트가 있습니다. 그들과 함께 당신은 #define 당신이 필요로하는 어떤 종류의 .rc2 스크립트를 만들 수 있고, 당신은 .rc 스크립트에서 #include이 될 것입니다.

이론적으로 작동해야하지만 결코 사용하지 마십시오.

자동 T4의 스크립트 코드를 생성하는 방법을 설명하고, 해당 페이지에 따라 당신이 당신의 비주얼 스튜디오 (2010, 2012, 2013)에 대한 모델링 SDK를 설치할 필요가 page 있습니다. 불행히도 이전 버전에서는 사용할 수 없습니다.

+0

디자인 타임에 T4를 사용한다면 아무 것도 설치할 필요가 없다. 빌드 중에 업데이트하려면 [이 질문] (http : //stackoverflow.com/q/2307567/33499) – wimh

관련 문제