From: ddzama Date: Wed, 4 May 2022 09:57:51 +0000 (+0300) Subject: 0032921: Configuratiuon, CMake - allow selecting C++ standard X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=293b9f436b5001bad5a5ca93a0e6881f230165f1;p=occt.git 0032921: Configuratiuon, CMake - allow selecting C++ standard Make C++ standard to be enable from cmake settings: Now, user can choose standard by setting cmake variable CPP_STANDARD. Available next standard items: C++11, C++14, C++17, C++20, C++23. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 23dd2d377b..feaff8d4ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,10 @@ set (CMAKE_SUPPRESS_REGENERATION TRUE) set (CMAKE_CONFIGURATION_TYPES Release Debug RelWithDebInfo CACHE INTERNAL "" FORCE) +# set using C++ standard +set (BUILD_CPP_STANDARD "C++11" CACHE STRING "Select using c++ standard.") +set_property(CACHE BUILD_CPP_STANDARD PROPERTY STRINGS "C++11" "C++14" "C++17" "C++20" "C++23") + # macro: include patched file if it exists macro (OCCT_INCLUDE_CMAKE_FILE BEING_INCLUDED_FILE) if (BUILD_PATCH AND EXISTS "${BUILD_PATCH}/${BEING_INCLUDED_FILE}.cmake") diff --git a/adm/cmake/occt_defs_flags.cmake b/adm/cmake/occt_defs_flags.cmake index dc20cc283b..8da7008322 100644 --- a/adm/cmake/occt_defs_flags.cmake +++ b/adm/cmake/occt_defs_flags.cmake @@ -130,14 +130,25 @@ elseif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMP endif() endif() +# Set desired C++ standard +if ("${BUILD_CPP_STANDARD}" STREQUAL "C++11") + set (CMAKE_CXX_STANDARD 11) +elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++14") + set (CMAKE_CXX_STANDARD 14) +elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++17") + set (CMAKE_CXX_STANDARD 17) +elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++20") + set (CMAKE_CXX_STANDARD 20) +elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++23") + set (CMAKE_CXX_STANDARD 23) +else () + message (FATAL_ERROR, "misprint in c++ standard name") +endif() + if ("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang") if (APPLE) # CLang can be used with both libstdc++ and libc++, however on OS X libstdc++ is outdated. - set (CMAKE_CXX_FLAGS "-std=c++0x -stdlib=libc++ ${CMAKE_CXX_FLAGS}") - elseif(NOT WIN32) - # CLang for Windows (at least CLang 8.0 distributed with VS 2019) - # does not support option "-std=c++0x" - set (CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}") + set (CMAKE_CXX_FLAGS "-stdlib=libc++ ${CMAKE_CXX_FLAGS}") endif() # Optimize size of binaries set (CMAKE_SHARED_LINKER_FLAGS "-Wl,-s ${CMAKE_SHARED_LINKER_FLAGS}") @@ -148,14 +159,10 @@ elseif(MINGW) # workaround bugs in mingw with vtable export set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-all-symbols") - # Require C++11 - set (CMAKE_CXX_FLAGS "-std=gnu++0x ${CMAKE_CXX_FLAGS}") # Optimize size of binaries set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") elseif (DEFINED CMAKE_COMPILER_IS_GNUCXX) - # Require C++11 - set (CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}") # Optimize size of binaries set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") diff --git a/samples/java/jniviewer/app/src/main/jni/CMakeLists.txt b/samples/java/jniviewer/app/src/main/jni/CMakeLists.txt index 59e131dfc0..eb41dc6fa0 100644 --- a/samples/java/jniviewer/app/src/main/jni/CMakeLists.txt +++ b/samples/java/jniviewer/app/src/main/jni/CMakeLists.txt @@ -37,7 +37,7 @@ list(APPEND aLibDeps lib_FreeType) # system libraries list(APPEND aLibDeps EGL GLESv2 log android) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -frtti -fexceptions -fpermissive") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++${CMAKE_CXX_STANDARD} -Wall -frtti -fexceptions -fpermissive") add_library(TKJniSample SHARED ${SOURCE_FILES}) target_link_libraries(TKJniSample ${aLibDeps})