2011-08-22 15 views
3

我正在嘗試使用#ifdef標記在Visual C++ .rc文件中的幾個不同的默認圖標之間切換。我可以通過命令行將預處理器定義傳遞給資源編譯器嗎?

使用MSBuild通過命令行創建切換#define值的構建。

我遇到的困難是使用Visual Studio 2010爲了將預處理器定義傳遞給資源編譯器,必須在項目設置(配置屬性 - >資源 - >常規)中定義它。

這使得難以使用#ifdef標籤,因爲使用這種方法它總是會在資源編譯器中定義。

我很想將其定義爲一個值,以便我可以使用預處理器#if SOMEVALUE == 4可能會工作,但似乎無法找到一種方法將預處理器定義+值通過命令行傳遞給MSBuild。

有沒有人知道一種方法來將預處理器定義直接傳遞給資源編譯器或通過命令行爲msbuild定義預處理器定義值的方法?

回答

1

我遇到的困難是使用Visual Studio 2010爲了將預處理器定義傳遞給資源編譯器,必須在項目設置(配置屬性 - >資源 - >常規)中定義它。

你有困難的部分。只需輸入定義爲TESTAPPLE=15,並且它將有效地爲整個項目#define TESTAPPLE 15

+1

不幸的是要傳遞的#define值項目編譯器不會傳遞給資源編譯器。即,編譯項目時,「/ T」TESTAPPLE = 15「將TESTAPPLE設置爲值15.但是,在資源編譯器中,TESTAPPLE剛剛定義,但不具有值15. – Maixy

+0

huh,guess I haven沒有足夠的資源編譯器。 http://www.cmake.org/pipermail/cmake/2011-January/042093.html暗示它可以運行'/ d「CMAKE_INTDIR = \」Release \「」',但不是授權源。 –

5

是的,這可以做到。

嘗試使用環境變量將值傳遞到構建過程中。

在您的項目屬性中,將$(CMDLINE_DEFINES)添加到資源預處理器定義的末尾。 (一定要選擇正確的配置。)

然後,當你使用的MSBuild從命令行類型(或添加到一個批處理文件)...

C:\Projects\SomeProject> set CMDLINE_DEFINES=SOMETEST=42 
C:\Projects\SomeProject> MSBuild SomeProject.vcproj 

的批處理文件可能看起來像:

@echo off 
SET CMDLINE_DEFINES=%1 
MSBUILD SomeProject.vcproj 

使用這個批處理文件,無論您在命令行上傳遞什麼,都將作爲預處理器宏傳遞到構建過程。

1

查看答案this,與建立ResourceCompile選項的額外步驟,即編輯您的項目文件在文本編輯器,包括這樣的內容:

<ItemDefinitionGroup> 
    <ClCompile> 
     <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions> 
    </ClCompile> 
    <ResourceCompile> 
     <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions> 
    </ResourceCompile> 
</ItemDefinitionGroup> 
相關問題