Позвольте мне ответить на ваш второй вопрос. Вы можете добавить следующие операторы в файл CMakeLists.txt, чтобы заставить компилятор использовать стандарт C ++ 11
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11")
Другие стандартные настройки:
- -std = c ++ 98 или -std = c ++ 03 ----- C ++ 98 (C ++ 2003)
- -std = c ++ 11 ----- C ++ 11
- -std = c ++ 14 ----- C ++ 14
- -std = c ++ 17 или -std = c ++ 1z ----- C ++ 17
- -std = gnu ++ 98 ----- C ++ 98 и расширения GNU
- -std = gnu ++ 11 ----- C ++ 11 и расширения GNU
- -std = gnu ++ 14 ----- C ++ 14 и расширения GNU
- -std = gnu ++ 1z ----- C ++ 17 и расширения GNU
Что касается стандарта по умолчанию, то это зависит от того, какой компилятор вы используете, и от версии компилятора. Я думаю, что для пояснения стандарта C ++ лучше использовать вышеуказанный метод.
Вы можете использовать следующую инструкцию в CMakeLists.txt, чтобы протестировать стандарты, поддерживаемые компилятором, и настроить его.
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
CHECK_CXX_COMPILER_FLAG("-std=c++17" COMPILER_SUPPORTS_CXX17)
if(COMPILER_SUPPORTS_CXX17)
message(STATUS "support c++17")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
elseif(COMPILER_SUPPORTS_CXX14)
message(STATUS "support c++14")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
elseif(COMPILER_SUPPORTS_CXX11)
message(STATUS "support c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()