CMakeLists.txt 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. cmake_minimum_required(VERSION 3.24...3.28)
  2. project(cxx_modules_export_transitive_targets CXX)
  3. include("${CMAKE_SOURCE_DIR}/../cxx-modules-rules.cmake")
  4. add_library(usage_reqs INTERFACE
  5. include/include.h
  6. includes/includes.h)
  7. target_compile_features(usage_reqs INTERFACE cxx_std_20)
  8. target_compile_definitions(usage_reqs
  9. INTERFACE
  10. FROM_USAGE_REQS)
  11. target_include_directories(usage_reqs
  12. INTERFACE
  13. "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
  14. "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/includes>"
  15. "$<INSTALL_INTERFACE:include>")
  16. add_library(export_transitive_targets STATIC)
  17. target_sources(export_transitive_targets
  18. PRIVATE
  19. forward.cxx
  20. PRIVATE
  21. FILE_SET modules_private TYPE CXX_MODULES
  22. BASE_DIRS
  23. "${CMAKE_CURRENT_SOURCE_DIR}"
  24. FILES
  25. private.cxx
  26. PUBLIC
  27. FILE_SET modules TYPE CXX_MODULES
  28. BASE_DIRS
  29. "${CMAKE_CURRENT_SOURCE_DIR}"
  30. FILES
  31. importable.cxx
  32. subdir/importable.cxx
  33. )
  34. target_link_libraries(export_transitive_targets PRIVATE usage_reqs)
  35. add_library(no_modules STATIC no_modules.cxx)
  36. install(TARGETS usage_reqs export_transitive_targets no_modules
  37. EXPORT CXXModules
  38. FILE_SET modules DESTINATION "lib/cxx/miu"
  39. INCLUDES DESTINATION "elsewhere")
  40. install(DIRECTORY include
  41. DESTINATION "include")
  42. install(DIRECTORY includes
  43. DESTINATION "elsewhere")
  44. install(EXPORT CXXModules
  45. NAMESPACE CXXModules::
  46. DESTINATION "lib/cmake/export_transitive_targets"
  47. FILE "export_transitive_targets-targets.cmake"
  48. CXX_MODULES_DIRECTORY "export_transitive_targets-cxx-modules")
  49. file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/export_transitive_targets-config.cmake"
  50. "include(\"\${CMAKE_CURRENT_LIST_DIR}/export_transitive_targets-targets.cmake\")
  51. set(\${CMAKE_FIND_PACKAGE_NAME}_FOUND 1)
  52. ")
  53. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/export_transitive_targets-config.cmake"
  54. DESTINATION "lib/cmake/export_transitive_targets")
  55. set(generator
  56. -G "${CMAKE_GENERATOR}")
  57. if (CMAKE_GENERATOR_TOOLSET)
  58. list(APPEND generator
  59. -T "${CMAKE_GENERATOR_TOOLSET}")
  60. endif ()
  61. if (CMAKE_GENERATOR_PLATFORM)
  62. list(APPEND generator
  63. -A "${CMAKE_GENERATOR_PLATFORM}")
  64. endif ()
  65. add_test(NAME export_transitive_targets_build
  66. COMMAND
  67. "${CMAKE_COMMAND}"
  68. "-Dexpected_source_dir=${CMAKE_INSTALL_PREFIX}/lib/cxx/miu"
  69. "-Dexpected_binary_dir=${CMAKE_INSTALL_PREFIX}/lib/cxx/bmi"
  70. "-Dexport_transitive_targets_DIR=${CMAKE_INSTALL_PREFIX}/lib/cmake/export_transitive_targets"
  71. ${generator}
  72. -S "${CMAKE_CURRENT_SOURCE_DIR}/test"
  73. -B "${CMAKE_CURRENT_BINARY_DIR}/test")