2016-11-22 82 views
0

我有一種情況,我需要我的應用程序來支持平臺的第3個選項。VisualStudio-自定義平臺

X86 X64 &已經被使用,所以我尋找後添加一個新的自定義平臺,當我選擇與平臺的dll文件將發生相應的變化。

我的目標是一個新的條件添加到項目文件中,這樣的事情:

<Reference Include="newCustomPlatform" Condition="'$(Platform)'=='newCustomPlatform'"> 
     <HintPath>..\..\_libBinary\87\newCustomPlatform.dll</HintPath> 
    </Reference> 

我找了一個答案,但我只找到x86或x64相關的答案。

可以這樣做嗎?

回答

1

Visual Studio不支持任意的自定義平臺。它只支持一組定義的支持目標平臺。一般常用,這些是x86(IA-32)和x86-64(AMD64)。如果您安裝了必要的構建工具,則可能還會獲得Itanium或ARM支持。歷史版本支持Alpha和PowerPC,也許還有一些我忘記的架構。

當然,這些都不會對您有所幫助。如果您最終希望生成32位x86或64位x86二進制文件,則必須使用這兩種平臺之一。

你想要做的是創建新的配置。默認情況下,您可以爲每個目標平臺獲得「調試」和「發佈」,但您可以擁有儘可能多或更少的配置。我所做的是使用必要的自定義屬性創建「調試(自定義)」和「發佈(自定義)」(或任何您想要的名稱)。

除此之外,也許我讀了太多你的例子,但87建議你試圖創建一個平臺,限制自己的x87指令集,而不使用SSE或更新的指令集?如果是這樣,那麼可以使用/arch編譯器開關進行配置。 /arch:IA32將您限制在x87指令集; /arch:SSE2是默認值,並且只是表示它。其他選項包括/arch:SSE,/arch:AVX/arch:AVX2。這些選項影響一些預定義的宏的定義。如果支持AVX,則將定義__AVX__。如果支持AVX2,則會定義__AVX2__。否則,你需要檢查_M_IX86_FP符號的價值:這將是0如果使用/arch:IA321如果使用/arch:SSE,或2/arch:SSE2及更高版本。您可以測試這些符號的值並有條件地將鏈接器指向必要的庫;例如:

#if (defined _M_IX86) 
    #if (defined __AVX2__) 
     #pragma comment(lib, "bin\avx2\MyData.lib") 
    #elif (defined __AVX__) 
     #pragma comment(lib, "bin\avx\MyData.lib") 
    #elif (_M_IX86_FP == 2) 
     #pragma comment(lib, "bin\sse2\MyData.lib") 
    #elif (_M_IX86_FP == 1) 
     #pragma comment(lib, "bin\sse\MyData.lib") 
    #else 
     #pragma comment(lib, "bin\87\MyData.lib") 
#endif 
+0

謝謝-87不是x87,它只是我的產品的版本。我最終做的事情就是這樣[link](http://stackoverflow.com/questions/533554/how-to-use-different-files-in-a-project-for-different-build-configurations- VIS)。就像我添加了一個新的「名稱」,我可以在ms-build過程中進行調整。 –