CMakeLists.txt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. cmake_minimum_required(VERSION 3.16)
  2. project(MocInclude)
  3. if (NOT DEFINED AUTOGEN_CORE_TEST_CMAKE)
  4. get_filename_component(AUTOGEN_CORE_TEST_CMAKE "../AutogenCoreTest.cmake" ABSOLUTE)
  5. endif()
  6. include("${AUTOGEN_CORE_TEST_CMAKE}")
  7. # Test moc include patterns
  8. set(COM_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Common")
  9. macro(addCopyCommand from to)
  10. add_custom_command(
  11. OUTPUT ${to}
  12. COMMAND ${CMAKE_COMMAND} -E copy ${from} ${to}
  13. DEPENDS ${from})
  14. endmacro()
  15. # Create an executable
  16. function(makeExecutable TARGET_NAME)
  17. # Utility variables
  18. set(CB_DIR "${CMAKE_CURRENT_BINARY_DIR}")
  19. # Copy directory
  20. file(REMOVE_RECURSE "${CB_DIR}/InIncludes")
  21. file(COPY "${COM_DIR}/InIncludes.in" DESTINATION "${CB_DIR}")
  22. file(RENAME "${CB_DIR}/InIncludes.in" "${CB_DIR}/InIncludes")
  23. # Generate .moc file from the header externally and
  24. # enabled SKIP_AUTOMOC on the source file
  25. qtx_wrap_cpp(ExternDotMOC ${COM_DIR}/ExternDot.hpp OPTIONS "-p" "./")
  26. addCopyCommand(${ExternDotMOC}
  27. ${CB_DIR}/ExternDot.moc)
  28. set_property(
  29. SOURCE ${COM_DIR}/ExternDot.cpp
  30. PROPERTY SKIP_AUTOMOC ON)
  31. # Generate .moc file from the GENERATED header externally
  32. # and enabled SKIP_AUTOMOC on the source file
  33. addCopyCommand(${COM_DIR}/ExternDotGenerated.hpp.in
  34. ${CB_DIR}/ExternDotGenerated.hpp)
  35. addCopyCommand(${COM_DIR}/ExternDotGenerated.cpp.in
  36. ${CB_DIR}/ExternDotGenerated.cpp)
  37. qtx_wrap_cpp(ExternDotGeneratedMOC
  38. ${CB_DIR}/ExternDotGenerated.hpp
  39. OPTIONS "-p" "./")
  40. addCopyCommand(${ExternDotGeneratedMOC}
  41. ${CB_DIR}/ExternDotGenerated.moc)
  42. set_property(
  43. SOURCE ${CB_DIR}/ExternDotGenerated.cpp
  44. PROPERTY SKIP_AUTOMOC ON)
  45. # Generate header moc file externally with a custom name
  46. # and enabled SKIP_AUTOMOC on the header
  47. qtx_wrap_cpp(MixedCustomMOC
  48. ${COM_DIR}/MixedCustom.hpp
  49. OPTIONS "-p" "./")
  50. addCopyCommand(${MixedCustomMOC}
  51. ${CB_DIR}/MixedCustom_extMoc.cpp)
  52. set_property(
  53. SOURCE ${COM_DIR}/MixedCustom.hpp
  54. PROPERTY SKIP_AUTOMOC ON)
  55. # Custom target to depend on
  56. add_custom_target("${TARGET_NAME}_MixedCustom"
  57. DEPENDS ${CB_DIR}/MixedCustom_extMoc.cpp
  58. BYPRODUCTS ${CB_DIR}/moc_MixedCustom.cpp
  59. COMMAND ${CMAKE_COMMAND} -E copy
  60. ${COM_DIR}/moc_MixedCustom.cpp.in
  61. ${CB_DIR}/moc_MixedCustom.cpp)
  62. add_executable(${TARGET_NAME}
  63. # Test own "*.moc" and "moc_*.cpp" includes
  64. ${COM_DIR}/None.cpp
  65. ${COM_DIR}/OwnDot.cpp
  66. ${COM_DIR}/OwnUnderscore.cpp
  67. ${COM_DIR}/OwnDotUnderscore.cpp
  68. # Test "moc_*.cpp" includes of other files
  69. ${COM_DIR}/OtherUnderscore.cpp
  70. ${COM_DIR}/OtherUnderscoreExtra.cpp
  71. ${COM_DIR}/OtherUnderscoreSub.cpp
  72. ${COM_DIR}/OtherUnderscoreSubDir/SubExtra.cpp
  73. # Test relative ../../ path for moc includes
  74. ${COM_DIR}/DualSub/Second/Second.cpp
  75. ${COM_DIR}/DualSubMocked.cpp
  76. # Test externally generated moc files
  77. ${COM_DIR}/ExternDot.cpp
  78. ${CB_DIR}/ExternDot.moc
  79. # Test externally generated moc files for GENERATED source
  80. ${CB_DIR}/ExternDotGenerated.cpp
  81. ${CB_DIR}/ExternDotGenerated.moc
  82. # Test externally generated moc files and SKIP_AUTOMOC enabled header
  83. ${COM_DIR}/MixedSkipped.cpp
  84. ${COM_DIR}/MixedCustom.hpp
  85. ${COM_DIR}/MixedCustom.cpp
  86. # Test sources in a subdirectory
  87. ${CB_DIR}/InIncludes/SubOwnDot.cpp
  88. ${COM_DIR}/InIncludesMoc.cpp
  89. )
  90. add_dependencies(${TARGET_NAME} "${TARGET_NAME}_MixedCustom")
  91. target_include_directories(${TARGET_NAME} PRIVATE "${COM_DIR}")
  92. target_include_directories(${TARGET_NAME} PRIVATE "${CB_DIR}")
  93. target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
  94. target_link_libraries(${TARGET_NAME} ${QT_LIBRARIES})
  95. set_target_properties(${TARGET_NAME} PROPERTIES AUTOMOC ON)
  96. endfunction()
  97. add_subdirectory(Strict)
  98. add_subdirectory(Relaxed)