123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- cmake_minimum_required(VERSION 3.10)
- project(MocDepends)
- include("../AutogenTest.cmake")
- include_directories(${CMAKE_CURRENT_BINARY_DIR})
- set(CSD ${CMAKE_CURRENT_SOURCE_DIR})
- set(CBD ${CMAKE_CURRENT_BINARY_DIR})
- # -- Test dependency on header generated by a custom command
- #
- # The ORIGIN_autogen target must depend on the same *GENERATED* source files as
- # the ORIGIN target. This is a requirement to ensure that all files for the
- # ORIGIN target are generated before the ORIGIN_autogen target is built.
- #
- # This tests the dependency of the mocDepGenFile_autogen target of
- # mocDepGenFile to the source file GenFile.hpp, which is *GENERATED*
- # by a custom command.
- # If mocDepGenFile_autogen gets built *before* or in *parallel* to the
- # custom command, the build will fail. That's because GenFile.hpp,
- # which is required by mocDepGenFile_autogen, is only valid after the
- # custom command has been completed.
- #
- # The sleep seconds artificially increase the build time of the custom command
- # to simulate a slow file generation process that takes longer to run than
- # the build of the mocDepGenFile_autogen target.
- add_custom_command(
- OUTPUT ${CBD}/GenFile.hpp
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/object_invalid.hpp.in ${CBD}/GenFile.hpp
- COMMAND ${CMAKE_COMMAND} -E sleep 3
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/object_valid.hpp.in ${CBD}/GenFile.hpp)
- add_executable(mocDepGenFile testGenFile.cpp ${CBD}/GenFile.hpp)
- target_link_libraries(mocDepGenFile ${QT_QTCORE_TARGET})
- set_target_properties(mocDepGenFile PROPERTIES AUTOMOC TRUE)
- # -- Test dependency on header generating custom target
- #
- # The ORIGIN_autogen target must depend on the same user defined targets
- # as the ORIGIN target. This is a requirement to ensure that all files for the
- # ORIGIN target are generated before the ORIGIN_autogen target is built.
- #
- # This tests the dependency of the mocDepTarget_autogen target of
- # mocDepTarget to the utility target mocDepTargetUtil.
- # If mocDepTarget_autogen gets built *before* or in *parallel* to
- # mocDepTargetUtil, the build will fail. That's
- # because GenTarget.hpp, which is required by mocDepTarget_autogen,
- # is only valid after the mocDepTargetUtil build has been completed.
- #
- # The sleep seconds artificially increase the build time of mocDepTargetUtil
- # to simulate a slow utility target build that takes longer to run than
- # the build of the mocDepTarget_autogen target.
- add_custom_target(mocDepTargetUtil
- BYPRODUCTS ${CBD}/GenTarget.hpp
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/object_invalid.hpp.in ${CBD}/GenTarget.hpp
- COMMAND ${CMAKE_COMMAND} -E sleep 3
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/object_valid.hpp.in ${CBD}/GenTarget.hpp)
- add_executable(mocDepTarget testGenTarget.cpp)
- target_link_libraries(mocDepTarget ${QT_QTCORE_TARGET})
- set_target_properties(mocDepTarget PROPERTIES AUTOMOC TRUE)
- add_dependencies(mocDepTarget mocDepTargetUtil)
- # -- Test 3: Depend on generated linked library
- # The ORIGIN_autogen target must depend on the same linked libraries
- # as the ORIGIN target. This is a requirement to ensure that all files for the
- # ORIGIN target are generated before the ORIGIN_autogen target is built.
- #
- # This tests the dependency of the mocDepGenLib_autogen target of mocDepGenLib
- # to the user generated library SimpleLib, which mocDepGenLib links to.
- # If mocDepGenLib_autogen gets built *before* or in *parallel* to SimpleLib,
- # the build will fail. That's because simpleLib.hpp, which is required by
- # mocDepGenLib_autogen, is only valid after the SimpleLib build has been
- # completed.
- #
- # The sleep seconds artificially increase the build time of SimpleLib
- # to simulate a slow utility library build that takes longer to run than
- # the build of the mocDepGenLib_autogen target.
- add_custom_command(
- OUTPUT ${CBD}/simpleLib.hpp ${CBD}/simpleLib.cpp
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/object_invalid.hpp.in ${CBD}/simpleLib.hpp
- COMMAND ${CMAKE_COMMAND} -E sleep 3
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/simpleLib.hpp.in ${CBD}/simpleLib.hpp
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/simpleLib.cpp.in ${CBD}/simpleLib.cpp)
- add_library(SimpleLib STATIC ${CBD}/simpleLib.hpp ${CBD}/simpleLib.cpp)
- target_link_libraries(SimpleLib ${QT_QTCORE_TARGET})
- add_executable(mocDepGenLib testGenLib.cpp)
- target_link_libraries(mocDepGenLib SimpleLib ${QT_QTCORE_TARGET})
- set_target_properties(mocDepGenLib PROPERTIES AUTOMOC TRUE)
- # -- Test AUTOGEN_TARGET_DEPENDS with GENERATED file dependency
- #
- # This tests the dependency of the mocDepATDFile_autogen target of
- # mocDepATDTarget to the utility target mocDepATDFileUtil.
- # If mocDepATDFile_autogen gets built *before* or in *parallel* to
- # mocDepATDFileUtil, the build will fail. That's
- # because ATDFile.hpp, which is required by mocDepATDFile_autogen,
- # is only valid after the mocDepATDFileUtil build has been completed.
- #
- # The sleep seconds artificially increase the build time of
- # mocDepATDFileUtil to simulate a slow utility target build that takes
- # longer to run than the build of the mocDepATDFile_autogen target.
- add_custom_command(
- OUTPUT ${CBD}/ATDFile.hpp
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/object_invalid.hpp.in ${CBD}/ATDFile.hpp
- COMMAND ${CMAKE_COMMAND} -E sleep 3
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/object_valid.hpp.in ${CBD}/ATDFile.hpp)
- add_executable(mocDepATDFile testATDFile.cpp)
- target_link_libraries(mocDepATDFile ${QT_QTCORE_TARGET})
- set_target_properties(mocDepATDFile PROPERTIES AUTOMOC TRUE)
- set_target_properties(mocDepATDFile PROPERTIES AUTOGEN_TARGET_DEPENDS ${CBD}/ATDFile.hpp)
- # -- Test AUTOGEN_TARGET_DEPENDS with target dependency
- #
- # This tests the dependency of the mocDepATDTarget_autogen target of
- # mocDepATDTarget to the utility target mocDepATDTargetUtil.
- # If mocDepATDTarget_autogen gets built *before* or in *parallel* to
- # mocDepATDTargetUtil, the build will fail. That's
- # because ATDTarget.hpp, which is required by mocDepATDTarget_autogen,
- # is only valid after the mocDepATDTargetUtil build has been completed.
- #
- # The sleep seconds artificially increase the build time of
- # mocDepATDTargetUtil to simulate a slow utility target build that takes
- # longer to run than the build of the mocDepATDTarget_autogen target.
- add_custom_target(mocDepATDTargetUtil
- BYPRODUCTS ${CBD}/ATDTarget.hpp
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/object_invalid.hpp.in ${CBD}/ATDTarget.hpp
- COMMAND ${CMAKE_COMMAND} -E sleep 3
- COMMAND ${CMAKE_COMMAND} -E copy ${CSD}/object_valid.hpp.in ${CBD}/ATDTarget.hpp)
- add_executable(mocDepATDTarget testATDTarget.cpp)
- target_link_libraries(mocDepATDTarget ${QT_QTCORE_TARGET})
- set_target_properties(mocDepATDTarget PROPERTIES AUTOMOC TRUE)
- set_target_properties(mocDepATDTarget PROPERTIES AUTOGEN_TARGET_DEPENDS mocDepATDTargetUtil)
|