CMakeLists.txt 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. cmake_minimum_required(VERSION 3.16)
  2. project(MocInterfaceMacroNames)
  3. include("../AutogenCoreTest.cmake")
  4. set(CMAKE_AUTOMOC ON)
  5. add_executable(dummy dummy.cpp)
  6. target_link_libraries(dummy PRIVATE static_lib interface_lib shared_lib)
  7. add_library(shared_lib SHARED shared_lib.cpp)
  8. set_target_properties(shared_lib PROPERTIES INTERFACE_AUTOMOC_MACRO_NAMES "SHARED_LIB_MACRO")
  9. add_library(interface_lib INTERFACE)
  10. set_target_properties(interface_lib PROPERTIES INTERFACE_AUTOMOC_MACRO_NAMES "INTERFACE_LIB_MACRO")
  11. add_library(static_lib STATIC static_lib.cpp)
  12. set_target_properties(static_lib PROPERTIES INTERFACE_AUTOMOC_MACRO_NAMES "STATIC_LIB_MACRO")
  13. set(AUTOGEN_INFO_FILE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/dummy_autogen.dir/AutogenInfo.json")
  14. set(CHECK_AUTOGEN_JSON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CheckAutogenJson.cmake")
  15. message(STATUS "AutogenInfo.json: ${AUTOGEN_INFO_FILE}")
  16. add_custom_command(TARGET dummy POST_BUILD
  17. COMMAND ${CMAKE_COMMAND} -DFILE_PATH=${AUTOGEN_INFO_FILE} -P ${CHECK_AUTOGEN_JSON_PATH}
  18. )
  19. install(TARGETS shared_lib EXPORT shared_lib)
  20. install(TARGETS interface_lib EXPORT interface_lib)
  21. install(TARGETS static_lib EXPORT static_lib)
  22. install(EXPORT shared_lib FILE shared_libTargets.cmake DESTINATION lib/cmake/shared_lib)
  23. install(EXPORT interface_lib FILE interface_libTargets.cmake DESTINATION lib/cmake/interface_lib)
  24. install(EXPORT static_lib FILE static_libTargets.cmake DESTINATION lib/cmake/static_lib)
  25. set(CHECK_EXPORT_TARGETS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CheckExportTargets.cmake")
  26. set(EXPORT_FOLDER_PATH "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Export")
  27. add_custom_command(TARGET dummy POST_BUILD
  28. COMMAND ${CMAKE_COMMAND} -DFOLDER_PATH=${EXPORT_FOLDER_PATH} -P ${CHECK_EXPORT_TARGETS_PATH}
  29. )
  30. # check if INTERFACE_AUTOMOC_MACRO_NAMES were transferred to the *_link libraries correctly
  31. add_executable(dummy_link dummy.cpp)
  32. target_link_libraries(dummy_link PRIVATE static_link_lib interface_link_lib shared_link_lib)
  33. add_library(shared_link_lib SHARED shared_lib.cpp)
  34. target_link_libraries(shared_link_lib PUBLIC shared_lib)
  35. add_library(interface_link_lib INTERFACE)
  36. target_link_libraries(interface_link_lib INTERFACE interface_lib)
  37. add_library(static_link_lib STATIC static_lib.cpp)
  38. target_link_libraries(static_link_lib PUBLIC static_lib)
  39. set(AUTOGEN_INFO_FILE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/dummy_link_autogen.dir/AutogenInfo.json")
  40. message(STATUS "AutogenInfo.json: ${AUTOGEN_INFO_FILE}")
  41. add_custom_command(TARGET dummy_link POST_BUILD
  42. COMMAND ${CMAKE_COMMAND} -DFILE_PATH=${AUTOGEN_INFO_FILE} -P ${CHECK_AUTOGEN_JSON_PATH}
  43. )