CMakeLists.txt 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. set(TARGET QtProtobufQtTypes)
  2. set(TARGET_EXPORT ${TARGET}Targets)
  3. set(TARGET_CONFIG ${TARGET}Config)
  4. set(TARGET_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/QtProtobuf)
  5. set(TARGET_LIB_DIR ${CMAKE_INSTALL_LIBDIR})
  6. set(TARGET_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
  7. set(TARGET_BINDIR ${CMAKE_INSTALL_BINDIR})
  8. set(CMAKE_AUTOMOC ON)
  9. set(CMAKE_AUTORCC ON)
  10. find_package(Qt5 COMPONENTS Core Gui Qml REQUIRED)
  11. find_package(Protobuf QUIET)
  12. if(NOT TARGET ${GENERATOR_TARGET})
  13. find_package(QtProtobufProject COMPONENTS Generator CONFIG REQUIRED)
  14. else()
  15. set(PROTO_PARSER ${QT_PROTOBUF_BINARY_DIR}/parsemessages.go)
  16. include(${QT_PROTOBUF_CMAKE_DIR}/QtProtobufGen.cmake)
  17. endif()
  18. set(CMAKE_POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE})
  19. set(CMAKE_CXX_STANDARD 14)
  20. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  21. include(${QT_PROTOBUF_CMAKE_DIR}/Coverage.cmake)
  22. include(${QT_PROTOBUF_CMAKE_DIR}/GenerateQtHeaders.cmake)
  23. file(GLOB SOURCES
  24. qtprotobufqttypes.cpp)
  25. file(GLOB HEADERS
  26. qtprotobufqttypes.h
  27. qtprotobufqttypesglobal.h)
  28. protobuf_generate_qt_headers(PUBLIC_HEADER ${HEADERS} COMPONENT QtProtobuf)
  29. add_library(${TARGET} ${SOURCES})
  30. file(GLOB PROTO_FILE ${CMAKE_CURRENT_SOURCE_DIR}/QtProtobuf/Qt*.proto)
  31. qtprotobuf_generate(TARGET ${TARGET}
  32. OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated
  33. PROTO_FILES ${PROTO_FILE}
  34. QML FOLDER)
  35. target_compile_definitions(${TARGET} PRIVATE QT_BUILD_PROTOBUF_QT_TYPES_LIB PUBLIC QT_PROTOBUF_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
  36. QT_PROTOBUF_VERSION_MINOR=${PROJECT_VERSION_MINOR})
  37. set_target_properties(${TARGET} PROPERTIES VERSION ${PROJECT_VERSION} OUTPUT_NAME ${TARGET}
  38. PROTO_INCLUDES "-I\"${CMAKE_CURRENT_SOURCE_DIR}\"" PUBLIC_HEADER "${HEADERS};${GENERATED_PUBLIC_HEADER}")
  39. target_compile_features(${TARGET} PUBLIC cxx_std_14
  40. cxx_auto_type
  41. cxx_decltype
  42. cxx_final
  43. cxx_override
  44. cxx_nullptr
  45. cxx_lambdas
  46. cxx_func_identifier)
  47. target_include_directories(${TARGET} PUBLIC
  48. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
  49. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/generated>
  50. $<BUILD_INTERFACE:${QT_PROTOBUF_BINARY_DIR}/include/QtProtobuf>
  51. $<INSTALL_INTERFACE:${TARGET_INCLUDE_DIR}>
  52. )
  53. add_library(${QT_PROTOBUF_PROJECT}::${TARGET} ALIAS ${TARGET})
  54. target_link_libraries(${TARGET} PUBLIC Qt5::Core Qt5::Gui Qt5::Qml ${QT_PROTOBUF_PROJECT}::QtProtobuf)
  55. include(CMakePackageConfigHelpers)
  56. configure_package_config_file(
  57. "${TARGET_CONFIG}.cmake.in" "${QT_PROTOBUF_BINARY_DIR}/${TARGET_CONFIG}.cmake"
  58. INSTALL_DESTINATION "${TARGET_CMAKE_DIR}")
  59. if(QT_PROTOBUF_INSTALL)
  60. install(TARGETS ${TARGET}
  61. EXPORT ${TARGET_EXPORT} COMPONENT dev
  62. ARCHIVE DESTINATION ${TARGET_LIB_DIR} COMPONENT lib
  63. PUBLIC_HEADER DESTINATION ${TARGET_INCLUDE_DIR} COMPONENT dev
  64. LIBRARY DESTINATION ${TARGET_LIB_DIR} COMPONENT lib
  65. RUNTIME DESTINATION ${TARGET_BINDIR} COMPONENT lib)
  66. install(EXPORT ${TARGET_EXPORT} NAMESPACE ${QT_PROTOBUF_PROJECT}:: FILE ${TARGET_EXPORT}.cmake DESTINATION ${TARGET_CMAKE_DIR} COMPONENT dev)
  67. install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/QtProtobuf/QtCore.proto ${CMAKE_CURRENT_SOURCE_DIR}/QtProtobuf/QtGui.proto DESTINATION "${TARGET_INCLUDE_DIR}" COMPONENT dev)
  68. install(FILES "${QT_PROTOBUF_BINARY_DIR}/${TARGET_CONFIG}.cmake" DESTINATION "${TARGET_CMAKE_DIR}" COMPONENT dev)
  69. endif()
  70. export(TARGETS ${TARGET} NAMESPACE ${QT_PROTOBUF_PROJECT}:: FILE ${TARGET_EXPORT}.cmake)
  71. add_coverage_target(TARGET ${TARGET})