CMakeLists.txt 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. cmake_minimum_required(VERSION 3.10)
  2. project(Complex)
  3. include("../AutogenTest.cmake")
  4. # -- Test: AUTOMOC AUTORCC AUTOUIC
  5. add_definitions(-DFOO -DSomeDefine="Barx")
  6. # enable relaxed mode so automoc can handle all the special cases:
  7. set(CMAKE_AUTOMOC_RELAXED_MODE TRUE)
  8. set(CMAKE_AUTOUIC ON)
  9. set(CMAKE_AUTORCC ON)
  10. # create an executable and two library targets, each requiring automoc:
  11. add_library(codeeditorLib STATIC codeeditor.cpp)
  12. add_library(privateSlot OBJECT private_slot.cpp)
  13. # Pass Qt compiler features to targets that don't link against Qt
  14. target_compile_features(codeeditorLib PRIVATE ${QT_COMPILE_FEATURES})
  15. target_compile_features(privateSlot PRIVATE ${QT_COMPILE_FEATURES})
  16. configure_file(generated_resource.qrc.in generated_resource.qrc @ONLY)
  17. add_custom_command(
  18. OUTPUT generated.txt
  19. COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/generated.txt.in" "${CMAKE_CURRENT_BINARY_DIR}/generated.txt"
  20. DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/generated.txt.in"
  21. )
  22. add_custom_target(generate_moc_input
  23. DEPENDS generated.txt
  24. COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/myinterface.h.in" "${CMAKE_CURRENT_BINARY_DIR}"
  25. COMMAND ${CMAKE_COMMAND} -E rename "${CMAKE_CURRENT_BINARY_DIR}/myinterface.h.in" "${CMAKE_CURRENT_BINARY_DIR}/myinterface.h"
  26. )
  27. add_custom_command(
  28. OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/myotherinterface.h"
  29. COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/myotherinterface.h.in" "${CMAKE_CURRENT_BINARY_DIR}/myotherinterface.h"
  30. DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/myotherinterface.h.in"
  31. )
  32. get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
  33. if(NOT _isMultiConfig AND NOT CMAKE_GENERATOR STREQUAL Ninja)
  34. set(debug_srcs "$<$<CONFIG:Debug>:debug_class.cpp>" $<$<CONFIG:Debug>:debug_resource.qrc>)
  35. set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:TEST_DEBUG_CLASS>)
  36. endif()
  37. # The -no-protection option disables the generation of include guards. Verify
  38. # that setting the source file property has an effect by using this and
  39. # issue an error in the preprocessor in calwidget.cpp if the include guard
  40. # is defined.
  41. set_source_files_properties(calwidget.ui PROPERTIES AUTOUIC_OPTIONS "-no-protection")
  42. add_executable(QtAutogen main.cpp calwidget.cpp second_widget.cpp foo.cpp blub.cpp bar.cpp abc.cpp
  43. multiplewidgets.cpp
  44. xyz.cpp yaf.cpp gadget.cpp $<TARGET_OBJECTS:privateSlot>
  45. test.qrc second_resource.qrc resourcetester.cpp generated.cpp ${debug_srcs}
  46. ${CMAKE_CURRENT_BINARY_DIR}/generated_resource.qrc
  47. )
  48. set_property(TARGET QtAutogen APPEND PROPERTY AUTOGEN_TARGET_DEPENDS generate_moc_input "${CMAKE_CURRENT_BINARY_DIR}/myotherinterface.h")
  49. add_executable(targetObjectsTest targetObjectsTest.cpp $<TARGET_OBJECTS:privateSlot>)
  50. target_link_libraries(targetObjectsTest ${QT_LIBRARIES})
  51. set_target_properties(
  52. QtAutogen codeeditorLib privateSlot targetObjectsTest
  53. PROPERTIES
  54. AUTOMOC TRUE
  55. )
  56. include(GenerateExportHeader)
  57. # The order is relevant here. B depends on A, and B headers depend on A
  58. # headers both subdirectories use CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE and we
  59. # test that CMAKE_AUTOMOC successfully reads the include directories
  60. # for the build interface from those targets. There has previously been
  61. # a bug where caching of the include directories happened before
  62. # extracting the includes to pass to moc.
  63. add_subdirectory(Bdir)
  64. add_subdirectory(Adir)
  65. add_library(libC SHARED libC.cpp)
  66. set_target_properties(libC PROPERTIES AUTOMOC TRUE)
  67. generate_export_header(libC)
  68. target_link_libraries(libC LINK_PUBLIC libB)
  69. target_include_directories(libC PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
  70. set_property(TARGET libC APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_BINARY_DIR} )
  71. target_link_libraries(QtAutogen codeeditorLib ${QT_LIBRARIES} libC)