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.