# Fake out that we have dyndep; we only need to generate, not actually build # here. set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) set(CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE "") enable_language(CXX) if (NOT CMAKE_GENERATOR MATCHES "Ninja") message(FATAL_ERROR "This test requires a 'Ninja' generator to be used.") endif () add_library(ninja-exports-public) target_sources(ninja-exports-public PRIVATE sources/module-impl.cxx sources/module-internal-part-impl.cxx sources/module-part-impl.cxx sources/module-use.cxx PUBLIC FILE_SET modules TYPE CXX_MODULES BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/sources" FILES sources/module.cxx sources/module-part.cxx FILE_SET internal_partitions TYPE CXX_MODULES FILES sources/module-internal-part.cxx) target_compile_features(ninja-exports-public PRIVATE cxx_std_20) set_property(TARGET ninja-exports-public PROPERTY EXPORT_NAME "with-public") install(TARGETS ninja-exports-public EXPORT exp FILE_SET modules DESTINATION "lib/cxx" COMPONENT "modules" FILE_SET internal_partitions DESTINATION "lib/cxx/internals" COMPONENT "modules-internal") add_library(ninja-exports-private) target_sources(ninja-exports-private PRIVATE sources/module-impl.cxx sources/module-internal-part-impl.cxx sources/module-part-impl.cxx sources/module-use.cxx PRIVATE FILE_SET modules TYPE CXX_MODULES BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/sources" FILES sources/module.cxx sources/module-part.cxx FILE_SET internal_partitions TYPE CXX_MODULES FILES sources/module-internal-part.cxx) target_compile_features(ninja-exports-private PRIVATE cxx_std_20) set_property(TARGET ninja-exports-private PROPERTY EXPORT_NAME "with-private") install(TARGETS ninja-exports-private EXPORT exp) # Test multiple build exports. export(EXPORT exp FILE "${CMAKE_BINARY_DIR}/lib/cmake/export1/export1-targets.cmake" NAMESPACE export1:: CXX_MODULES_DIRECTORY "cxx-modules") export(EXPORT exp FILE "${CMAKE_BINARY_DIR}/lib/cmake/export2/export2-targets.cmake" CXX_MODULES_DIRECTORY "cxx-modules") # Test multiple install exports. install(EXPORT exp DESTINATION "lib/cmake/export1" NAMESPACE export1:: CXX_MODULES_DIRECTORY "cxx-modules") install(EXPORT exp DESTINATION "lib/cmake/export2" CXX_MODULES_DIRECTORY "cxx-modules")