我安装了多个版本的Microsoft Visual C ++(2005年,2008年,2012年,2013年) 我正在将我的项目从VC ++ 2008转移到2013年。
我将“平台工具集”设置为“Visual Studio 2013(v120)” 我将“附加库目录”设置为“C:\ local \ boost_1_55_0 \ lib32-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.0\VC\include\time.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 '..\..\lib\debug\boostlibs.lib' or at 'C:\Users\me\prj\Debug\vc90.pdb'; linking object as if no debug info
这些行似乎表明使用了编译器的第9版。
是这样的吗?
如何设置不同的编译器?我如何检查它是否真的被使用过?
如何强制编译器和链接器使用特定版本的Boost?我已在“其他包含目录”和“其他库目录”中指定了其路径。
答案 0 :(得分:2)
我如何检查它是否真的被使用过?
您可以查看来源中的compiler version macros:
(可能是BOOST_STATIC_ASSERT(...)
)
_MSC_FULL_VER
- 评估主要,次要和内部版本号 编译器版本号的组件。主要数字是 句点分隔版本号的第一个组成部分,未成年人 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版本取决于您的包含路径的顺序。应该使用在包含路径上找到的第一个Boost版本。
由于Boost标头包含链接器编译指示,因此您不需要为boost lib
文件显式设置任何链接器输入。当然,正确的lib文件需要位于链接器路径上。
答案 1 :(得分:0)
通过Visual C ++ GUI未能将编译器设置为新的12.0版本后,我手动修改了*.vcxproj
文件,用“12.0”替换了所有“9.0”标记。
现在使用正确的编译器。