CMakeLists.txt 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src/protobuf ${CMAKE_SOURCE_DIR}/src/grpc)
  65. if(WIN32)
  66. #Set path to GTest build libraries
  67. set(GTEST_BOTH_LIBRARIES "")
  68. #Set path to GTest include directory
  69. include_directories(${GTEST_INCLUDE_PATHS} "/")
  70. endif()
  71. file(GLOB SOURCES main.cpp addressbookengine.cpp universallistmodel.cpp universallistmodelbase.cpp)
  72. set(addressbook "addressbook_example")
  73. add_executable(${addressbook} ${SOURCES} ${GENERATED_SOURCES} resources.qrc)
  74. if(WIN32)
  75. target_link_libraries(${addressbook} qtgrpc qtprotobufsupport Qt5::Quick Qt5::Qml)
  76. elseif(UNIX)
  77. target_link_libraries(${addressbook} qtgrpc qtprotobufsupport Qt5::Quick)
  78. endif()
  79. add_dependencies(${addressbook} ${addressbookgeneration})