| enable_language(C CXX) |
| |
| get_property(enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES) |
| list(REMOVE_ITEM enabled_languages NONE) |
| list(JOIN enabled_languages "," enabled_languages_genex) |
| file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/enabled-languages.txt" "${enabled_languages}") |
| |
| add_library(concrete STATIC empty.c) |
| add_library(headers INTERFACE) |
| add_library(imported INTERFACE IMPORTED) |
| set_property(TARGET imported PROPERTY SYSTEM FALSE) |
| target_link_libraries(concrete PRIVATE headers imported) |
| |
| set(include_root "${CMAKE_CURRENT_BINARY_DIR}/include") |
| foreach(dir IN ITEMS common c-only cxx-only cxx-id |
| system-C system-CXX system-cxx-id all-languages mixed system-common) |
| file(MAKE_DIRECTORY "${include_root}/${dir}") |
| endforeach() |
| foreach(language IN LISTS enabled_languages) |
| file(MAKE_DIRECTORY "${include_root}/lang-${language}") |
| endforeach() |
| |
| foreach(target IN ITEMS concrete headers imported) |
| target_include_directories(${target} INTERFACE |
| "${include_root}/common" |
| # Visual Studio also evaluates includes for MIDL, exclude from include_directories. |
| "$<$<COMPILE_LANGUAGE:${enabled_languages_genex}>:${include_root}/lang-$<COMPILE_LANGUAGE>>" |
| "$<$<COMPILE_LANGUAGE:C>:${include_root}/c-only>" |
| "$<$<COMPILE_LANGUAGE:CXX>:${include_root}/cxx-only>" |
| "$<$<COMPILE_LANG_AND_ID:CXX,${CMAKE_CXX_COMPILER_ID}>:${include_root}/cxx-id>" |
| "$<$<COMPILE_LANG_AND_ID:CXX,NonexistentCompiler>:${include_root}/wrong-id>" |
| "$<$<COMPILE_LANGUAGE:C,CXX>:${include_root}/all-languages>" |
| # Repeating a path must not duplicate entries or their language lists. |
| "$<$<COMPILE_LANGUAGE:CXX>:${include_root}/cxx-only>" |
| "${include_root}/mixed" |
| "$<INSTALL_INTERFACE:unused>") |
| target_include_directories(${target} SYSTEM INTERFACE |
| "${include_root}/system-common" |
| "$<$<COMPILE_LANGUAGE:C>:${include_root}/system-C>" |
| "$<$<COMPILE_LANGUAGE:CXX>:${include_root}/system-CXX>" |
| "$<$<COMPILE_LANG_AND_ID:CXX,${CMAKE_CXX_COMPILER_ID}>:${include_root}/system-cxx-id>" |
| "$<$<COMPILE_LANG_AND_ID:CXX,NonexistentCompiler>:${include_root}/system-wrong-id>" |
| # This path is a regular include for C and a system include for C++. |
| "$<$<COMPILE_LANGUAGE:CXX>:${include_root}/mixed>") |
| endforeach() |