Commit d85fe40f authored by Hans-Christian Ebke's avatar Hans-Christian Ebke

Added build support for C++11.

FindCXX11.cmake copied from OpenFlipper.
parent 0cd8fcb3
......@@ -33,6 +33,16 @@ include (ACGOutput)
# Definitions
# ========================================================================
set(INHIBIT_CXX11_SUPPORT OFF CACHE BOOL "Do not use C++11 even if it is available. (This is mainly useful for unit testing.)")
if (NOT INHIBIT_CXX11_SUPPORT)
find_package (CXX11)
if (CXX11_FOUND)
add_definitions(${CXX11_FLAGS} -DCPP11_ENABLED)
endif (CXX11_FOUND)
endif (NOT INHIBIT_CXX11_SUPPORT)
if (WIN32)
add_definitions(
-D_USE_MATH_DEFINES -DNOMINMAX
......
IF (NOT CXX11_FLAGS OR NOT CXX11_FOUND)
include(CheckCXXSourceCompiles)
include(FindPackageHandleStandardArgs)
set(CXX11_FLAG_CANDIDATES
#Gnu and Intel Linux
"-std=c++11"
#Microsoft Visual Studio, and everything that automatically accepts C++11
" "
#Intel windows
"/Qstd=c++0x"
)
set(CXX11_TEST_SOURCE
"
#include <algorithm>
#include <utility>
#include <memory>
class Matrix {
public:
// Initializer lists
Matrix(int a, int b, int c, int d)
: data {a, b, c, d}
{
// Lambda functions
std::transform(data, data+4, data,
[](int x) { return x+1; });
}
// rvalue references
Matrix(Matrix &&rhs) {
}
private:
int data[4];
};
int main()
{
int n[] {4,7,6,1,2};
// auto
for (auto i : n) {
Matrix mat (3,5,1,2);
// std::move, unique_ptr
std::unique_ptr<Matrix> m2(
new Matrix(std::move(mat)));
}
return 0;
}
")
foreach(FLAG ${CXX11_FLAG_CANDIDATES})
set(SAFE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
set(CMAKE_REQUIRED_FLAGS "${FLAG}")
unset(CXX11_FLAG_DETECTED CACHE)
check_cxx_source_compiles("${CXX11_TEST_SOURCE}" CXX11_FLAG_DETECTED)
set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}")
if(CXX11_FLAG_DETECTED)
set(CXX11_FLAGS_INTERNAL "${FLAG}")
break()
endif(CXX11_FLAG_DETECTED)
endforeach(FLAG ${CXX11_FLAG_CANDIDATES})
set(CXX11_FLAGS "${CXX11_FLAGS_INTERNAL}")
find_package_handle_standard_args(CXX11 DEFAULT_MSG CXX11_FLAGS)
mark_as_advanced(CXX11_FLAGS)
ENDIF()
\ No newline at end of file
......@@ -22,6 +22,16 @@ if ( OPENMESH_BUILD_UNIT_TESTS )
# set additional link directories
link_directories(${GTEST_LIBRARY_DIR} )
set(INHIBIT_CXX11_SUPPORT OFF CACHE BOOL "Do not use C++11 even if it is available. (This is mainly useful for unit testing.)")
if (NOT INHIBIT_CXX11_SUPPORT)
find_package (CXX11)
if (CXX11_FOUND)
add_definitions(${CXX11_FLAGS} -DCPP11_ENABLED)
endif (CXX11_FOUND)
endif (NOT INHIBIT_CXX11_SUPPORT)
if ( CMAKE_GENERATOR MATCHES "^Visual Studio 11.*" )
add_definitions( /D _VARIADIC_MAX=10 )
endif()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment