CMakeLists.txt 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. qt5_wrap_cpp(MOC_SOURCES ${GENERATED_HEADERS})
  51. list(APPEND GENERATED_SOURCES ${MOC_SOURCES})
  52. # TODO: so far the following cpp files are not generated
  53. list(REMOVE_ITEM GENERATED_SOURCES
  54. ${CMAKE_CURRENT_BINARY_DIR}/globalenums.cpp
  55. )
  56. set_source_files_properties(${GENERATED_SOURCES} PROPERTIES GENERATED TRUE)
  57. # TODO: but their headers should be included in sources for executable to be processed by moc
  58. list(APPEND GENERATED_SOURCES
  59. ${CMAKE_CURRENT_BINARY_DIR}/globalenums.h
  60. )
  61. set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/globalenums.h PROPERTIES GENERATED TRUE)
  62. # FIXME: protobuf and grpc headers should be propagated from corresponding targets
  63. include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src/protobuf ${CMAKE_SOURCE_DIR}/src/grpc)
  64. file(GLOB SOURCES main.cpp addressbookengine.cpp universallistmodel.cpp universallistmodelbase.cpp)
  65. file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../addressbookserver/cert.pem DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
  66. set(addressbook "addressbook_example")
  67. add_executable(${addressbook} ${SOURCES} ${GENERATED_SOURCES} resources.qrc)
  68. target_link_libraries(${addressbook} qtgrpc qtprotobufsupport Qt5::Quick Qt5::Qml)
  69. add_dependencies(${addressbook} ${addressbookgeneration})