0

我正在尝试让 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 代码并不是那么老练,因此我们将不胜感激。有谁知道该怎么做?

4

1 回答 1

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()

尝试这个。

于 2016-05-06T08:04:56.030 回答