VisualStudio-自定义平台

时间:2016-11-22 10:12:58

标签: visual-studio dll x86 64-bit

我有一种情况,我需要我的应用程序来支持平台的第3个选项。

X86& X64已经被使用,所以我正在寻找的是添加一个新的自定义平台,当我选择该平台时,dll文件将相应地改变。

我的目标是为项目文件添加一个新条件,类似于:

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

我找到了答案,但我只找到了x86或x64相关的答案。

可以吗?

1 个答案:

答案 0 :(得分: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:IA32,如果使用1则为/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