2016-11-22 56 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过程中进行调整。 –