如何在使用特定平台工具集时检查Visual c++编译器版本



我安装了多个版本的Microsoft Visual c++(2005、2008、2012、2013)。
我正在从vc++ 2008年到2013年移动我的项目。

我将"平台工具集"设置为"Visual Studio 2013 (v120)"。
我将"附加库目录"设置为"C:localboost_1_55_0lib32-msvc-12.0"(其中安装了新版本的Boost)。

到目前为止,我没有办法检查代码是否已使用编译器的12版(2013)编译。我将"抑制启动横幅"设置为"否"。我得到的唯一细节是:

    ..src.cpp(371): warning C4996: 'gmtime': This function or variable may be unsafe. Consider using gmtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>          c:Program Files (x86)Microsoft Visual Studio 9.0VCincludetime.inl(101) : see declaration of 'gmtime'
...
Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
...
1>boostlibs.lib(archive_exception.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with '....libdebugboostlibs.lib' or at 'C:UsersmeprjDebugvc90.pdb'; linking object as if no debug info

这几行似乎表明使用了版本9的编译器。

是这样吗?

如何设置不同的编译器?我如何检查它是否真的被使用了?

如何强制编译器和链接器使用特定版本的Boost?我已经在"附加包含目录"one_answers"附加库目录"中指定了它的路径。

我如何检查它是否真的被使用了?

你可以在源代码中查看编译器版本宏:

(可能与BOOST_STATIC_ASSERT(...))

_MSC_FULL_VER——计算为主要、次要和构建号编译器版本号的组件。主号码是以句号分隔的版本号的第一个组成部分,minorNumber是第二个组件,build Number是第三个组件组件。例如,如果Visual c++的版本号编译器为15.00.20706.01时,_MSC_FULL_VER宏的计算结果为150020706. 输入cl/?在命令行查看编译器的版本号。

_MSC_VER——求为的主、副数分量编译器的版本号。主号是第一个组成部分的版本号,副版本号为第二个组件。

例如,如果Visual c++编译器的版本号为17.00.51106.1, _MSC_VER宏计算为1700。


这几行似乎表明使用了版本9的编译器。

…他们可能——另一方面,有可能(我的推测-我没有多vs机器检查),项目转换搞砸了,你的VS2013项目现在包含对所有VC9的显式"引用"(vc90.pdb显式设置,包括来自VS2008的路径,而不是正确的VS2013)。

确保检查项目设置


如何强制编译器和链接器使用特定版本的Boost?

大致说来,您使用的Boost版本是由包含路径的顺序决定的。应该使用include路径上找到的第一个Boost版本。

由于Boost头包含链接器pragmas,您不需要为Boost lib文件显式设置任何链接器输入。当然,正确的库文件需要在链接器路径上。

通过Visual c++ GUI将编译器设置为新的12.0版本失败后,我手动修改了*.vcxproj文件,将所有的"9.0"标记替换为"12.0"。

最新更新