Skip to content

Commit 2863c9f

Browse files
committed
Merge pull request opencv#9077 from alalek:cmake_enable_cxx11
2 parents 37c8f21 + 3f02f56 commit 2863c9f

File tree

3 files changed

+40
-9
lines changed

3 files changed

+40
-9
lines changed

CMakeLists.txt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,12 @@ if(POLICY CMP0056)
110110
cmake_policy(SET CMP0056 NEW)
111111
endif()
112112

113-
include(cmake/OpenCVUtils.cmake)
114-
115-
if(OPENCV_CXX11)
116-
#cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
117-
set(CMAKE_CXX_STANDARD 11)
118-
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
113+
if(POLICY CMP0067)
114+
cmake_policy(SET CMP0067 NEW)
119115
endif()
120116

117+
include(cmake/OpenCVUtils.cmake)
118+
121119
# must go before the project command
122120
ocv_update(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
123121
if(DEFINED CMAKE_BUILD_TYPE)
@@ -149,6 +147,7 @@ endif()
149147
# ----------------------------------------------------------------------------
150148
# Detect compiler and target platform architecture
151149
# ----------------------------------------------------------------------------
150+
OCV_OPTION(ENABLE_CXX11 "Enable C++11 compilation mode" "${OPENCV_CXX11}")
152151
include(cmake/OpenCVDetectCXXCompiler.cmake)
153152

154153
# Add these standard paths to the search paths for FIND_LIBRARY
@@ -305,7 +304,6 @@ OCV_OPTION(INSTALL_TESTS "Install accuracy and performance test binar
305304

306305
# OpenCV build options
307306
# ===================================================
308-
OCV_OPTION(OPENCV_CXX11 "Enable C++11 compilation mode" OFF )
309307
OCV_OPTION(ENABLE_CCACHE "Use ccache" (UNIX AND NOT IOS AND (CMAKE_GENERATOR MATCHES "Makefile" OR CMAKE_GENERATOR MATCHES "Ninja")) )
310308
OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers" ON IF (NOT IOS AND NOT CMAKE_CROSSCOMPILING) )
311309
OCV_OPTION(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) )
@@ -963,8 +961,8 @@ string(STRIP "${OPENCV_COMPILER_STR}" OPENCV_COMPILER_STR)
963961
status("")
964962
status(" C/C++:")
965963
status(" Built as dynamic libs?:" BUILD_SHARED_LIBS THEN YES ELSE NO)
966-
if(OPENCV_CXX11)
967-
status(" C++11:" "YES")
964+
if(ENABLE_CXX11 OR HAVE_CXX11)
965+
status(" C++11:" HAVE_CXX11 THEN YES ELSE NO)
968966
endif()
969967
status(" C++ Compiler:" ${OPENCV_COMPILER_STR})
970968
status(" C++ flags (Release):" ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE})

cmake/OpenCVDetectCXXCompiler.cmake

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,3 +182,23 @@ if(CMAKE_VERSION VERSION_LESS "3.1")
182182
endif()
183183
endforeach()
184184
endif()
185+
186+
if(ENABLE_CXX11)
187+
#cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
188+
set(CMAKE_CXX_STANDARD 11)
189+
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
190+
set(CMAKE_CXX_EXTENSIONS OFF) # use -std=c++11 instead of -std=gnu++11
191+
if(XCMAKE_CXX11_COMPILE_FEATURES)
192+
set(HAVE_CXX11 ON)
193+
endif()
194+
endif()
195+
if(NOT HAVE_CXX11)
196+
ocv_check_compiler_flag(CXX "" HAVE_CXX11 "${OpenCV_SOURCE_DIR}/cmake/checks/cxx11.cpp")
197+
if(NOT HAVE_CXX11 AND ENABLE_CXX11)
198+
ocv_check_compiler_flag(CXX "-std=c++11" HAVE_STD_CXX11 "${OpenCV_SOURCE_DIR}/cmake/checks/cxx11.cpp")
199+
if(HAVE_STD_CXX11)
200+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
201+
set(HAVE_CXX11 ON)
202+
endif()
203+
endif()
204+
endif()

cmake/checks/cxx11.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)
2+
// OK
3+
#else
4+
#error "C++11 is not supported"
5+
#endif
6+
7+
static int test() { return 0; }
8+
9+
int main()
10+
{
11+
auto res = test();
12+
return res;
13+
}

0 commit comments

Comments
 (0)