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()
Попробуй это.