Added build support for C++11.
FindCXX11.cmake copied from OpenFlipper.
This commit is contained in:
@@ -33,6 +33,16 @@ include (ACGOutput)
|
|||||||
# Definitions
|
# 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)
|
if (WIN32)
|
||||||
add_definitions(
|
add_definitions(
|
||||||
-D_USE_MATH_DEFINES -DNOMINMAX
|
-D_USE_MATH_DEFINES -DNOMINMAX
|
||||||
|
|||||||
71
cmake/FindCXX11.cmake
Normal file
71
cmake/FindCXX11.cmake
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
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()
|
||||||
@@ -22,6 +22,16 @@ if ( OPENMESH_BUILD_UNIT_TESTS )
|
|||||||
# set additional link directories
|
# set additional link directories
|
||||||
link_directories(${GTEST_LIBRARY_DIR} )
|
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.*" )
|
if ( CMAKE_GENERATOR MATCHES "^Visual Studio 11.*" )
|
||||||
add_definitions( /D _VARIADIC_MAX=10 )
|
add_definitions( /D _VARIADIC_MAX=10 )
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user