CMakeLists.txt 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. cmake_minimum_required(VERSION 3.24...3.28)
  2. project(scan_properties CXX)
  3. include("${CMAKE_SOURCE_DIR}/../cxx-modules-rules.cmake")
  4. set(scanning_control 1)
  5. if (CMAKE_GENERATOR MATCHES "Visual Studio")
  6. set(scanning_control 0)
  7. endif ()
  8. # To detect that not-to-be scanned sources are not scanned, add a `-D` to the
  9. # scan flags so that the files can detect whether scanning happened and error
  10. # if not.
  11. string(APPEND CMAKE_CXX_MODULE_MAP_FLAG
  12. " -DCMAKE_SCANNED_THIS_SOURCE")
  13. string(REPLACE "<DEFINES>" "<DEFINES> -DCMAKE_SCANNED_THIS_SOURCE"
  14. CMAKE_CXX_SCANDEP_SOURCE "${CMAKE_CXX_SCANDEP_SOURCE}")
  15. set_property(SOURCE always_scan.cxx
  16. PROPERTY CXX_SCAN_FOR_MODULES 1)
  17. set_property(SOURCE never_scan.cxx
  18. PROPERTY CXX_SCAN_FOR_MODULES 0)
  19. add_executable(scans_everything)
  20. target_sources(scans_everything
  21. PRIVATE
  22. main.cxx
  23. join.cxx
  24. always_scan.cxx
  25. never_scan.cxx
  26. PRIVATE
  27. FILE_SET CXX_MODULES
  28. BASE_DIRS
  29. "${CMAKE_CURRENT_SOURCE_DIR}"
  30. FILES
  31. module.cxx)
  32. target_compile_features(scans_everything PRIVATE cxx_std_20)
  33. target_compile_definitions(scans_everything PRIVATE SCAN_AT_TARGET_LEVEL=1)
  34. target_compile_definitions(scans_everything PRIVATE "SCANNING_CONTROL=${scanning_control}")
  35. set(CMAKE_CXX_SCAN_FOR_MODULES 0)
  36. add_executable(no_scan_everything)
  37. target_sources(no_scan_everything
  38. PRIVATE
  39. main.cxx
  40. join.cxx
  41. always_scan.cxx
  42. never_scan.cxx
  43. PRIVATE
  44. FILE_SET CXX_MODULES
  45. BASE_DIRS
  46. "${CMAKE_CURRENT_SOURCE_DIR}"
  47. FILES
  48. module.cxx)
  49. target_compile_features(no_scan_everything PRIVATE cxx_std_20)
  50. target_compile_definitions(no_scan_everything PRIVATE SCAN_AT_TARGET_LEVEL=0)
  51. target_compile_definitions(no_scan_everything PRIVATE "SCANNING_CONTROL=${scanning_control}")
  52. add_test(NAME scanned COMMAND scans_everything)
  53. add_test(NAME unscanned COMMAND no_scan_everything)