Path: blob/master/Tests/CMakeCommands/target_include_directories/CMakeLists.txt
3157 views
cmake_minimum_required(VERSION 3.10)12project(target_include_directories)34file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/privateinclude")5file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/privateinclude/privateinclude.h" "#define PRIVATEINCLUDE_DEFINE\n")67file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/publicinclude")8file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/publicinclude/publicinclude.h" "#define PUBLICINCLUDE_DEFINE\n")910file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/interfaceinclude")11file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/interfaceinclude/interfaceinclude.h" "#define INTERFACEINCLUDE_DEFINE\n")1213file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/poison")14file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/poison/common.h" "#error Should not be included\n")1516file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/cure")17file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cure/common.h" "#define CURE_DEFINE\n")1819add_executable(target_include_directories20"${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"21)22target_include_directories(target_include_directories23PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/privateinclude"24PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/publicinclude"25INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/interfaceinclude"26)2728target_include_directories(target_include_directories29PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/poison"30)31target_include_directories(target_include_directories32BEFORE PUBLIC "$<$<STREQUAL:$<TARGET_PROPERTY:target_include_directories,TYPE>,EXECUTABLE>:${CMAKE_CURRENT_BINARY_DIR}/cure>"33)3435# Has no effect because the target type is not SHARED_LIBRARY:36target_include_directories(target_include_directories37BEFORE PUBLIC "$<$<STREQUAL:$<TARGET_PROPERTY:target_include_directories,TYPE>,SHARED_LIBRARY>:${CMAKE_CURRENT_BINARY_DIR}/poison>"38)3940add_executable(consumer41"${CMAKE_CURRENT_SOURCE_DIR}/consumer.cpp"42)4344target_sources(consumer PRIVATE45"${CMAKE_CURRENT_SOURCE_DIR}/consumer.c"46)47target_include_directories(consumer48PRIVATE49$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/cxx_only>50$<$<COMPILE_LANGUAGE:C>:${CMAKE_CURRENT_SOURCE_DIR}/c_only>51)52if(CMAKE_GENERATOR MATCHES "Visual Studio|Xcode")53target_compile_definitions(consumer54PRIVATE TEST_LANG_DEFINES_FOR_VISUAL_STUDIO_OR_XCODE55)56endif()5758target_include_directories(consumer59PRIVATE60$<TARGET_PROPERTY:target_include_directories,INTERFACE_INCLUDE_DIRECTORIES>61relative_dir62relative_dir/$<TARGET_PROPERTY:NAME>63)6465# Test no items66target_include_directories(consumer67PRIVATE68)69target_include_directories(consumer70BEFORE PRIVATE71)72target_include_directories(consumer73SYSTEM BEFORE PRIVATE74)75target_include_directories(consumer76SYSTEM PRIVATE77)7879include_directories(${CMAKE_CURRENT_BINARY_DIR})80add_library(imp UNKNOWN IMPORTED)81get_target_property(_res imp INCLUDE_DIRECTORIES)82if (_res)83message(SEND_ERROR "include_directories populated the INCLUDE_DIRECTORIES target property")84endif()8586# Test selecting lexicographically-later header of same name via include order.87# Xcode 'USE_HEADERMAP = YES' breaks this.88add_library(same STATIC same.c same_one/same.h same_two/same.h)89target_include_directories(same PRIVATE same_two)909192