특정 C++ 버전을 지정하고자 같은 아마 뭔가 나중에 CMake 3.1이 작업을 수행하고 권장되는 방법은 대상 기본값을 지정합니다 CXX_STANDARD
, CXX_STANDARD_REQUIRED
및 CXX_EXTENSIONS
대상 속성 또는 변수 등가물을 사용하는 것입니다 . 자세한 내용은 here를 찾을 수 있습니다,하지만 짧은 버전은 이런 식입니다 :
cmake_minimum_required(VERSION 3.1)
project(Example)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# ... Define targets, etc. as usual
CMake는 컴파일러가 지원하는 기반으로 요청 된 C++ 표준에 대한 적절한 컴파일러 플래그를 선택하거나 '아무튼 있는지 에러한다 요청한 표준을 지원합니다.
또한 CMake는 목표 속성 인 CXX_STANDARD
에 지정된 언어 표준보다 나중 인 언어 표준을 사용하도록 대상을 업그레이드 할 수 있습니다. compile feature requirements (@FlorianWolters 대답에서 언급 한대로)을 사용하면 언어 표준 요구 사항을 높일 수 있습니다. 실제로, CMake는 항상 타겟에 설정된 CXX_STANDARD
대상 속성 또는 컴파일 기능 요구 사항에 의해 지정된 더 강력한 언어 요구 사항을 선택합니다. 또한 CXX_EXTENSIONS
이 컴파일 기능과 상호 작용하는 방식을 정확하게 반영하지 않는다는 점에 유의하십시오. CXX_EXTENSIONS
은 대부분의 공통 컴파일러에 대해 CXX_STANDARD
이 지정되어있는 경우에만 적용됩니다 (하나의 컴파일러 플래그와 함께 지정되기 때문에).
* "아마도 C++ 11과 비슷한 문제가 있습니다."* C++ 11 vs C++ 0x, 이전 버전은 gcc4.7/8에서 소개되었습니다. –
Btw, 오래된 스위치 (0x, 1y, 1z)는 최신 컴파일러를 지원하는 컴파일러에서도 잘 작동하므로이 "올바른"것을 얻을 필요가 없습니다. –
** ** 원시 컴파일러 플래그를 전달하는 것이 CMake 반 패턴이며 메타 빌드 시스템/빌드 시스템 생성기의 전체 개념에 비해이 "올바른"필요성이 ** 있습니다. –