CMakeLists.txt 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. cmake_minimum_required(VERSION 3.24...3.28)
  2. project(cxx_modules_deep_chain CXX)
  3. include("${CMAKE_SOURCE_DIR}/../cxx-modules-rules.cmake")
  4. if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  5. include(CheckCompilerFlag)
  6. check_compiler_flag(CXX "-Wread-modules-implicitly" have_implicit_module_warning)
  7. if (have_implicit_module_warning)
  8. add_compile_options(-Werror=read-modules-implicitly)
  9. endif ()
  10. endif ()
  11. add_library(a STATIC)
  12. target_sources(a
  13. PUBLIC
  14. FILE_SET CXX_MODULES
  15. BASE_DIRS
  16. "${CMAKE_CURRENT_SOURCE_DIR}"
  17. FILES
  18. a.cxx)
  19. target_compile_features(a PUBLIC cxx_std_20)
  20. add_library(b STATIC)
  21. target_sources(b
  22. PUBLIC
  23. FILE_SET CXX_MODULES
  24. BASE_DIRS
  25. "${CMAKE_CURRENT_SOURCE_DIR}"
  26. FILES
  27. b.cxx)
  28. target_compile_features(b PUBLIC cxx_std_20)
  29. target_link_libraries(b PUBLIC a)
  30. add_library(c STATIC)
  31. target_sources(c
  32. PUBLIC
  33. FILE_SET CXX_MODULES
  34. BASE_DIRS
  35. "${CMAKE_CURRENT_SOURCE_DIR}"
  36. FILES
  37. c.cxx)
  38. target_compile_features(c PUBLIC cxx_std_20)
  39. target_link_libraries(c PUBLIC b)
  40. add_library(d STATIC)
  41. target_sources(d
  42. PUBLIC
  43. FILE_SET CXX_MODULES
  44. BASE_DIRS
  45. "${CMAKE_CURRENT_SOURCE_DIR}"
  46. FILES
  47. d.cxx)
  48. target_compile_features(d PUBLIC cxx_std_20)
  49. target_link_libraries(d PUBLIC c)
  50. add_library(e STATIC)
  51. target_sources(e
  52. PUBLIC
  53. FILE_SET CXX_MODULES
  54. BASE_DIRS
  55. "${CMAKE_CURRENT_SOURCE_DIR}"
  56. FILES
  57. e.cxx)
  58. target_compile_features(e PUBLIC cxx_std_20)
  59. target_link_libraries(e PUBLIC d)
  60. add_executable(exe)
  61. target_link_libraries(exe PRIVATE e)
  62. target_sources(exe
  63. PRIVATE
  64. main.cxx)
  65. add_test(NAME exe COMMAND exe)