CMake Ошибка "Нет компилятора C++11!" с MS VS 2015

Я пытаюсь заставить 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\

Файл CMakeLists.txt для mlpack-2.0.1 находится в:

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

Я использовал CMake GUI и командную строку, чтобы попытаться заставить это работать, но не смог сделать работу. Я не настолько искушен в изменении кода CMake, поэтому любая помощь будет принята с благодарностью. Кто-нибудь знает что делать?

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

Попробуй это.

Другие вопросы по тегам