cmake_minimum_required(VERSION 3.16) project(AutogenOriginDependsOff) include("../AutogenCoreTest.cmake") get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) # XXX(xcode-per-cfg-src): Enable multi-config code path for Xcode # when the Xcode generator supports per-config sources. if(_isMultiConfig AND NOT CMAKE_GENERATOR STREQUAL "Xcode") set(mocs_compilation_cpp "mocs_compilation_$.cpp") else() set(mocs_compilation_cpp "mocs_compilation.cpp") endif() set(CSD ${CMAKE_CURRENT_SOURCE_DIR}) set(CBD ${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CSD}) include_directories(${CBD}) # A GENERATED file ensures there will be an _autogen target in VS add_custom_command ( OUTPUT "${CBD}/config_a.hpp" COMMAND ${CMAKE_COMMAND} -E copy "${CSD}/config.hpp.in" "${CBD}/config_a.hpp" ) # Library "a_mc" provides a header that holds a string with the content of # mocs_compilation.cpp from a_qt. It therefore must depend on a_qt_autogen. add_custom_target ( a_mc COMMAND ${CMAKE_COMMAND} -E sleep 2 COMMAND ${CMAKE_COMMAND} "-DMCF=${CBD}/a_qt_autogen/${mocs_compilation_cpp}" "-DCF_IN=${CSD}/a_mc.hpp.in" "-DCF_OUT=${CBD}/a_mc.hpp" -P ${CSD}/configure_content.cmake ) add_dependencies ( a_mc a_qt_autogen ) # Library "a_qt" # - depends on a GENERATED file # - AUTOMOC enabled # - depends on a target (a_mc) that depends on a_qt_qutogen add_library ( a_qt a_qt.cpp "${CBD}/config_a.hpp" ) add_dependencies ( a_qt a_mc ) target_link_libraries ( a_qt ${QT_QTCORE_TARGET}) set_target_properties ( a_qt PROPERTIES AUTOMOC TRUE) # Disable AUTOGEN_ORIGIN_DEPENDS to avoid loop dependencies set_target_properties ( a_qt PROPERTIES AUTOGEN_ORIGIN_DEPENDS OFF) # A GENERATED file ensures there will be an _autogen target in VS add_custom_command ( OUTPUT "${CBD}/config_b.hpp" COMMAND ${CMAKE_COMMAND} -E copy "${CSD}/config.hpp.in" "${CBD}/config_b.hpp" ) # Library "b_mc" provides a header that holds a string function that returns # the content of mocs_compilation.cpp from b_qt. # It therefore must depend on b_qt_autogen. add_custom_command ( OUTPUT ${CBD}/b_mc.cpp DEPENDS b_qt_autogen COMMAND ${CMAKE_COMMAND} -E sleep 2 COMMAND ${CMAKE_COMMAND} "-DMCF=${CBD}/b_qt_autogen/${mocs_compilation_cpp}" "-DCF_IN=${CSD}/b_mc.cpp.in" "-DCF_OUT=${CBD}/b_mc.cpp" -P ${CSD}/configure_content.cmake ) add_library ( b_mc ${CSD}/b_mc.hpp ${CBD}/b_mc.cpp ) # Library "b_qt" # - depends on a GENERATED file # - AUTOMOC enabled # - depends on a library (b_mc) that depends on b_qt_qutogen add_library ( b_qt b_qt.cpp "${CBD}/config_b.hpp" ) target_link_libraries ( b_qt b_mc ) target_link_libraries ( b_qt ${QT_QTCORE_TARGET}) set_target_properties ( b_qt PROPERTIES AUTOMOC TRUE) # Disable AUTOGEN_ORIGIN_DEPENDS to avoid loop dependencies set_target_properties ( b_qt PROPERTIES AUTOGEN_ORIGIN_DEPENDS OFF) # The main target depends on both libraries which depend on the _autogen # target of the main target. add_executable ( autogenOriginDependsOff main.cpp ) target_link_libraries ( autogenOriginDependsOff a_qt b_qt )