From d638508d332958c618264c432e71138f44f81794 Mon Sep 17 00:00:00 2001 From: Andy Maloney Date: Tue, 10 Sep 2019 10:51:13 -0400 Subject: [PATCH] Set C++ standard options in CMake per-target instead of globally (#735) Setting CMAKE_CXX_STANDARD and CMAKE_CXX_STANDARD_REQUIRED directly is problematic when including yaml-cpp as a subproject. The proper way is to set these per-target. --- CMakeLists.txt | 9 +++++---- test/CMakeLists.txt | 5 +++++ util/CMakeLists.txt | 12 ++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 60bff7e..03848bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,10 +26,6 @@ option(YAML_CPP_INSTALL "Enable generation of install target" ON) # http://www.cmake.org/cmake/help/cmake2.6docs.html#command:add_library option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF) -# Set minimum C++ to 2011 standards -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - # --> Apple option(APPLE_UNIVERSAL_BIN "Apple: Build universal binary" OFF) @@ -261,6 +257,11 @@ if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) PRIVATE $) endif() +set_target_properties(yaml-cpp PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON +) + set_target_properties(yaml-cpp PROPERTIES COMPILE_FLAGS "${yaml_c_flags} ${yaml_cxx_flags}" ) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 8bdf303..0a669d5 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -51,6 +51,11 @@ add_executable(run-tests ${test_headers} ) +set_target_properties(run-tests PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON +) + add_dependencies(run-tests googletest_project) set_target_properties(run-tests PROPERTIES diff --git a/util/CMakeLists.txt b/util/CMakeLists.txt index 8a803b0..09dafa2 100644 --- a/util/CMakeLists.txt +++ b/util/CMakeLists.txt @@ -2,13 +2,25 @@ cmake_minimum_required(VERSION 3.5) add_sources(parse.cpp) add_executable(parse parse.cpp) +set_target_properties(parse PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON +) target_link_libraries(parse yaml-cpp) add_sources(sandbox.cpp) add_executable(sandbox sandbox.cpp) +set_target_properties(sandbox PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON +) target_link_libraries(sandbox yaml-cpp) add_sources(read.cpp) add_executable(read read.cpp) +set_target_properties(read PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON +) target_link_libraries(read yaml-cpp)