CMakeLists.txt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. set(addressbookgeneration "addressbook_generation")
  2. set(ADDRESSBOOK_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
  3. file(MAKE_DIRECTORY ${ADDRESSBOOK_OUT_DIR})
  4. file(GLOB PROTO_FILES ABSOLUTE ${CMAKE_CURRENT_SOURCE_DIR}/proto/addressbook.proto)
  5. ## test sources generation
  6. if(WIN32)
  7. #Needs to set path to protobuf libraries
  8. set(PROTOBUF_INSTALATION_PATH "")
  9. set(Protobuf_PROTOC_EXECUTABLE ${PROTOBUF_INSTALATION_PATH}/bin/protoc.exe)
  10. endif()
  11. add_custom_target(${addressbookgeneration})
  12. add_custom_command(TARGET ${addressbookgeneration}
  13. COMMAND ${Protobuf_PROTOC_EXECUTABLE} --${PROJECT_NAME}_opt=out=${ADDRESSBOOK_OUT_DIR} --plugin=protoc-gen-${PROJECT_NAME}=$<TARGET_FILE:${PROJECT_NAME}> --qtprotobuf_out=${ADDRESSBOOK_OUT_DIR} -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/ ${PROTO_FILES}
  14. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/proto/
  15. DEPENDS ${PROTO_FILES}
  16. COMMENT "Generating test headers"
  17. )
  18. add_dependencies(${addressbookgeneration} ${PROJECT_NAME})
  19. ## test sources build
  20. # policy enables automoc for generated files
  21. if(${CMAKE_VERSION} VERSION_GREATER "3.10.0")
  22. cmake_policy(SET CMP0071 NEW)
  23. endif()
  24. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  25. set(CMAKE_AUTOMOC ON)
  26. set(CMAKE_AUTORCC ON)
  27. if(Qt5_POSITION_INDEPENDENT_CODE)
  28. set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  29. endif()
  30. find_package(Qt5 COMPONENTS Core Quick Network REQUIRED)
  31. set(EXPECTED_GENERATED_HEADERS
  32. addressbookclient.h
  33. # addressbookserver.h
  34. address.h
  35. contact.h
  36. contacts.h
  37. globalenums.h
  38. job.h
  39. listframe.h
  40. phonenumber.h
  41. simpleresult.h
  42. globalenums.h
  43. )
  44. foreach(EXPECTED_GENERATED_HEADER ${EXPECTED_GENERATED_HEADERS})
  45. get_filename_component(GENERATED_HEADER_BASENAME ${EXPECTED_GENERATED_HEADER} NAME_WE)
  46. list(APPEND GENERATED_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${GENERATED_HEADER_BASENAME}.cpp)
  47. list(APPEND GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/${GENERATED_HEADER_BASENAME}.h)
  48. set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${GENERATED_HEADER_BASENAME}.cpp PROPERTY SKIP_AUTOMOC ON)
  49. endforeach(EXPECTED_GENERATED_HEADER)
  50. if(${CMAKE_VERSION} VERSION_LESS "3.10.0")
  51. qt5_wrap_cpp(MOC_SOURCES ${GENERATED_HEADERS})
  52. list(APPEND GENERATED_SOURCES ${MOC_SOURCES})
  53. endif()
  54. # TODO: so far the following cpp files are not generated
  55. list(REMOVE_ITEM GENERATED_SOURCES
  56. ${CMAKE_CURRENT_BINARY_DIR}/globalenums.cpp
  57. )
  58. set_source_files_properties(${GENERATED_SOURCES} PROPERTIES GENERATED TRUE)
  59. # TODO: but their headers should be included in sources for executable to be processed by moc
  60. list(APPEND GENERATED_SOURCES
  61. ${CMAKE_CURRENT_BINARY_DIR}/globalenums.h
  62. )
  63. set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/globalenums.h PROPERTIES GENERATED TRUE)
  64. # FIXME: protobuf and grpc headers should be propagated from corresponding targets
  65. include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src/protobuf ${CMAKE_SOURCE_DIR}/src/grpc)
  66. file(GLOB SOURCES main.cpp addressbookengine.cpp universallistmodel.cpp universallistmodelbase.cpp)
  67. set(addressbook "addressbook_example")
  68. add_executable(${addressbook} ${SOURCES} ${GENERATED_SOURCES} resources.qrc)
  69. target_link_libraries(${addressbook} qtgrpc qtprotobufsupport Qt5::Quick Qt5::Qml)
  70. add_dependencies(${addressbook} ${addressbookgeneration})