CMakeLists.txt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. cmake_minimum_required(VERSION 3.0)
  2. project(qtprotobuf)
  3. find_package(Protobuf)
  4. if (NOT Protobuf_FOUND OR Protobuf_VERSION VERSION_LESS "3.0.0")
  5. include(cmake/DownloadProject.cmake)
  6. download_project(PROJ Protobuf
  7. GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
  8. GIT_TAG 3.7.x
  9. )
  10. set(protobuf_BUILD_TESTS OFF CACHE BOOL "Disable protobuf tests build" FORCE)
  11. add_subdirectory("${Protobuf_SOURCE_DIR}/cmake" ${Protobuf_BINARY_DIR})
  12. endif()
  13. set(CMAKE_CXX_STANDARD 14)
  14. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  15. if(UNIX)
  16. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror")
  17. elseif(WIN32)
  18. set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wall" "-Werror")
  19. endif()
  20. if(DEFINED $ENV{MAKE_TESTS})
  21. set(MAKE_TESTS ${MAKE_TESTS})
  22. elseif(NOT DEFINED MAKE_TESTS)
  23. set(MAKE_TESTS ON)
  24. endif()
  25. add_executable(${PROJECT_NAME}
  26. src/generator/main.cpp
  27. src/generator/generator.cpp
  28. src/generator/classgeneratorbase.cpp
  29. src/generator/servergenerator.cpp
  30. src/generator/protobufclassgenerator.cpp
  31. src/generator/globalenumsgenerator.cpp
  32. src/generator/servicegeneratorbase.cpp
  33. src/generator/templates.cpp
  34. )
  35. if(WIN32)
  36. #Needs to set path to protobuf libraries
  37. set(PROTOBUF_INSTALATION_PATH "")
  38. include_directories(${PROTOBUF_INSTALATION_PATH}/include)
  39. set(PROTOBUF_LIBRARIES_PATH ${PROTOBUF_INSTALATION_PATH}/lib)
  40. target_link_libraries(${PROJECT_NAME} "${PROTOBUF_LIBRARIES_PATH}/libprotobuf.lib")
  41. target_link_libraries(${PROJECT_NAME} "${PROTOBUF_LIBRARIES_PATH}/libprotoc.lib")
  42. elseif(UNIX)
  43. if(NOT Protobuf_FOUND)
  44. target_link_libraries(${PROJECT_NAME} libprotoc)
  45. else()
  46. target_link_libraries(${PROJECT_NAME} ${Protobuf_LIBRARIES} ${Protobuf_PROTOC_LIBRARY})
  47. endif()
  48. endif()
  49. add_subdirectory("src/lib")
  50. if(MAKE_TESTS)
  51. set(testgeneration "test_generation")
  52. set(TESTS_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/tests)
  53. file(MAKE_DIRECTORY ${TESTS_OUT_DIR})
  54. add_custom_target(${testgeneration})
  55. file(GLOB PROTO_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/tests/proto ${CMAKE_CURRENT_SOURCE_DIR}/tests/proto/*.proto)
  56. if(WIN32)
  57. include_directories("src/lib")
  58. add_custom_command(TARGET ${testgeneration} POST_BUILD
  59. COMMAND ${PROTOBUF_INSTALATION_PATH}/bin/protoc.exe --plugin=protoc-gen-${PROJECT_NAME}=${CMAKE_BINARY_DIR}/qtprotobuf.exe --qtprotobuf_out=${CMAKE_CURRENT_BINARY_DIR}/tests
  60. ${PROTO_FILES}
  61. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests/proto/
  62. COMMENT "Generating test headers"
  63. )
  64. elseif(UNIX)
  65. add_custom_command(TARGET ${testgeneration} POST_BUILD
  66. COMMAND ${Protobuf_PROTOC_EXECUTABLE} --plugin=protoc-gen-${PROJECT_NAME}=${CMAKE_BINARY_DIR}/qtprotobuf --qtprotobuf_out=${CMAKE_CURRENT_BINARY_DIR}/tests
  67. ${PROTO_FILES}
  68. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests/proto/
  69. COMMENT "Generating test headers"
  70. )
  71. endif()
  72. add_dependencies(${testgeneration} ${PROJECT_NAME})
  73. add_subdirectory("tests")
  74. endif()
  75. install(TARGETS ${PROJECT_NAME}
  76. RUNTIME DESTINATION bin)