【问题标题】:CMake Error "No C++11 compiler available!" with MS VS 2015CMake 错误“没有可用的 C++11 编译器!”与 MS VS 2015
【发布时间】:2016-09-01 05:15:09
【问题描述】:

我正在尝试让 mlpack-2.0.1 在 Visual Studio 14 2015(我使用的是 Windows)上工作,但没有成功,我已经尝试了几个小时,但一直收到相同的错误:“不C++11 编译器可用!”此外,我在 Stack Exchange 上阅读了一些其他类似的问题,但都没有成功。我很困惑,因为我已经使用 VS 2015 几个月没有任何错误。是否有可能我在那里更改了一些编译器设置并且甚至不知道它?我应该卸载 Visual Studio 并重新安装吗?我已经下载了 CMake 3.5.2,它的目录是(.exe 在 \bin 子文件夹中):

C:\Program Files (x86)\CMake\

mlpack-2.0.1 的 CMakeLists.txt 文件位于:

C:\Users\owner\Desktop\C++\

我已使用 CMake GUI 和命令提示符尝试使其工作,但无法完成这项工作。我对更改 CMake 代码并不是那么老练,因此我们将不胜感激。有谁知道该怎么做?

【问题讨论】:

    标签: c++11 visual-studio-2015 cmake mlpack


    【解决方案1】:

    你的 mlpack 有问题:

        cmake_minimum_required(VERSION 2.8.5)
        project(mlpack C CXX)
    
        # Ensure that we have a C++11 compiler.
        include(CMake/CXX11.cmake)
        check_for_cxx11_compiler(HAS_CXX11)
        if(NOT HAS_CXX11)
          message(FATAL_ERROR "No C++11 compiler available!")
        endif(NOT HAS_CXX11)
        enable_cxx11()
    

    尤其是 CMake/CXX11.cmake:

        macro(check_for_cxx11_compiler _VAR)
            message(STATUS "Checking for C++11 compiler")
            set(${_VAR})
            if((MSVC AND (MSVC10 OR MSVC11 OR MSVC12)) OR
               (CMAKE_COMPILER_IS_GNUCXX AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 4.6) OR
               (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.1) OR
               (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 12.0))
                set(${_VAR} 1)
                message(STATUS "Checking for C++11 compiler - available")
            else()
                message(STATUS "Checking for C++11 compiler - unavailable")
            endif()
        endmacro()
    

    所以你必须将 MSVC14 添加到条件:

        macro(check_for_cxx11_compiler _VAR)
            message(STATUS "Checking for C++11 compiler")
            set(${_VAR})
            if((MSVC AND (MSVC10 OR MSVC11 OR MSVC12 OR MSVC13 OR MSVC14)) OR
               (CMAKE_COMPILER_IS_GNUCXX AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 4.6) OR
               (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.1) OR
               (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 12.0))
                set(${_VAR} 1)
                message(STATUS "Checking for C++11 compiler - available")
            else()
                message(STATUS "Checking for C++11 compiler - unavailable")
            endif()
        endmacro()
    

    试试这个。

    【讨论】:

    • 这将在下一个 Visual Studio 版本中再次中断。不怪你,但这只是 mlpack 方面的草率思考。充其量一个未知的编译器应该是一个警告。
    • @MSalters:同意,最好的解决方案是不要在项目定义中检查编译器。
    • 这有助于克服“没有可用的 C++11 编译器!”错误,但现在我有一个新的停止配置:“找不到回溯(缺少:Backtrace_LIBRARY Backtrace_INCLUDE_DIR)”,然后“找不到ARMADILLO_INCLUDE_DIR-NOTFOUND/armadillo_bits/config.hpp!无法确定要链接的内容。”
    • @Jeremy:你必须下载 Backtrace 库,构建它并将其放入 CMake 搜索路径。
    • 只是一个提示:更通用的检查是if ((MSVC AND MSVC_VERSION GREATER 1599) OR ...)。但通常最好改用更通用的用法来定义所需的compiler features
    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2016-01-05
    • 2016-03-30
    • 2013-05-03
    • 1970-01-01
    相关资源
    最近更新 更多