我有一种情况,我需要我的应用程序来支持平台的第3个选项。
X86& X64已经被使用,所以我正在寻找的是添加一个新的自定义平台,当我选择该平台时,dll文件将相应地改变。
我的目标是为项目文件添加一个新条件,类似于:
<Reference Include="newCustomPlatform" Condition="'$(Platform)'=='newCustomPlatform'">
<HintPath>..\..\_libBinary\87\newCustomPlatform.dll</HintPath>
</Reference>
我找到了答案,但我只找到了x86或x64相关的答案。
可以吗?
答案 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