2016-12-19 9 views

Odpowiedz

7

można wykorzystywać target_compile_features wymagają C++ 11 (/ 14/17) CECHA:

target_compile_features(target PRIVATE|PUBLIC|INTERFACE feature1 [feature2 ...]) 

z feature1 jest cechą wymienione w CMAKE_CXX_KNOWN_FEATURES. Na przykład, jeśli chcesz używać constexpr w publicznych API, można użyć:

add_library(foo ...) 
target_compile_features(foo PUBLIC cxx_constexpr) 

Należy również spojrzeć na WriteCompilerDetectionHeader module który pozwala wykryć cechy jak opcje, a także zapewnia wsteczną kompatybilność realizacja niektórych funkcji, jeśli kompilator nie obsługuje:

write_compiler_detection_header(
    FILE foo_compiler_detection.h 
    PREFIX FOO 
    COMPILERS GNU MSVC 
    FEATURES cxx_constexpr cxx_nullptr 
) 

Tutaj plik foo_compiler_detection.h będą generowane z FOO_COMPILER_CXX_CONSTEXPR zdefiniowane, jeżeli kluczowe constexpr jest dostępny:

#include "foo_compiler_detection.h" 

#if FOO_COMPILER_CXX_CONSTEXPR 

// implementation with constexpr available 
constexpr int bar = 0; 

#else 

// implementation with constexpr not available 
const int bar = 0; 

#endif 

Ponadto FOO_CONSTEXPR zostaną zdefiniowane i rozwinie się constexpr jeśli funkcja istnieje obecnego kompilatora. W przeciwnym razie będzie puste.

FOO_NULLPTR zostanie zdefiniowany i zostanie rozwinięty do nullptr, jeśli funkcja istnieje dla bieżącego kompilatora. W przeciwnym razie rozszerzy się na implementację zgodności (np. NULL).

#include "foo_compiler_detection.h" 

FOO_CONSTEXPR int bar = 0; 

void baz(int* p = FOO_NULLPTR); 

Zobacz CMake documentation.

Powiązane problemy