【问题标题】:How to check the Visual C++ compiler version when using a specific platform toolset?使用特定平台工具集时如何检查 Visual C++ 编译器版本?
【发布时间】:2014-06-17 14:55:10
【问题描述】:

我安装了多个版本的 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?我已经在“附加包含目录”和“附加库目录”中指定了它的路径。

【问题讨论】:

    标签: visual-c++ boost visual-studio-2013


    【解决方案1】:

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

    您可以在您的来源中查看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 文件需要在链接器路径上。

    【讨论】:

      【解决方案2】:

      在未能通过 Visual C++ GUI 将编译器设置为新的 12.0 版本后,我手动修改了 *.vcxproj 文件,将所有“9.0”标记替换为“12.0”。

      它现在使用正确的编译器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-05
        • 2012-03-31
        • 2021-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多