cmake_minimum_required(VERSION 3.0) project(target_compile_features) if (NOT CMAKE_CXX_COMPILE_FEATURES AND NOT CMAKE_C_COMPILE_FEATURES) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test_dummy.cpp" "int main(int,char**) { return 0; }\n" ) add_executable(target_compile_features "${CMAKE_CURRENT_BINARY_DIR}/test_dummy.cpp") return() endif() set(CMAKE_VERBOSE_MAKEFILE ON) if (CMAKE_C_COMPILE_FEATURES) add_executable(target_compile_features main.c) target_compile_features(target_compile_features PRIVATE c_restrict ) add_library(lib_restrict lib_restrict.c) target_compile_features(lib_restrict PUBLIC c_restrict ) add_executable(restrict_user restrict_user.c) target_link_libraries(restrict_user lib_restrict) endif() if (CMAKE_CXX_COMPILE_FEATURES) if (CMAKE_C_COMPILE_FEATURES) set(target_suffix _cxx) endif() add_executable(target_compile_features${target_suffix} main.cpp) target_compile_features(target_compile_features${target_suffix} PRIVATE cxx_auto_type ) add_library(lib_auto_type lib_auto_type.cpp) target_compile_features(lib_auto_type PUBLIC cxx_auto_type ) add_executable(lib_user lib_user.cpp) target_link_libraries(lib_user lib_auto_type) endif()