BuildTarsCpp.cmake 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. macro(build_tars_server MODULE DEPS)
  2. project(${MODULE})
  3. include_directories(./)
  4. aux_source_directory(. DIR_SRCS)
  5. FILE(GLOB_RECURSE TARS_LIST "${CMAKE_CURRENT_SOURCE_DIR}/*.tars")
  6. FILE(GLOB_RECURSE PB_LIST "${CMAKE_CURRENT_SOURCE_DIR}/*.proto")
  7. set(TARS_LIST_DEPENDS)
  8. set(PB_LIST_DEPENDS)
  9. if (TARS_LIST)
  10. set(CLEAN_LIST)
  11. foreach (TARS_SRC ${TARS_LIST})
  12. get_filename_component(NAME_WE ${TARS_SRC} NAME_WE)
  13. get_filename_component(PATH ${TARS_SRC} PATH)
  14. set(TARS_H ${NAME_WE}.h)
  15. set(CUR_TARS_GEN ${PATH}/${TARS_H})
  16. LIST(APPEND TARS_LIST_DEPENDS ${CUR_TARS_GEN})
  17. add_custom_command(OUTPUT ${CUR_TARS_GEN}
  18. WORKING_DIRECTORY ${PATH}
  19. DEPENDS ${TARS2CPP} ${TARS_SRC}
  20. COMMAND ${TARS2CPP} ${TARS_SRC}
  21. COMMENT "${TARS2CPP} ${TARS_SRC}")
  22. list(APPEND CLEAN_LIST ${PATH}/${TARS_H})
  23. endforeach ()
  24. set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEAN_LIST}")
  25. set(TARS_TARGET "TARS_${MODULE}")
  26. add_custom_target(${TARS_TARGET} ALL DEPENDS ${TARS_LIST_DEPENDS} tars2cpp)
  27. add_executable(${MODULE} ${DIR_SRCS})
  28. add_dependencies(${MODULE} ${TARS_TARGET})
  29. elseif(PB_LIST)
  30. set(CLEAN_LIST)
  31. set(_PROTOBUF_PROTOC ${CMAKE_BINARY_DIR}/src/protobuf/bin/protoc)
  32. foreach (PB_SRC ${PB_LIST})
  33. get_filename_component(NAME_WE ${PB_SRC} NAME_WE)
  34. get_filename_component(PATH ${PB_SRC} PATH)
  35. set(PB_H ${NAME_WE}.pb.h)
  36. set(PB_CC ${NAME_WE}.pb.cc)
  37. set(CUR_PB_GEN ${PATH}/${PB_H} ${PATH}/${PB_CC})
  38. LIST(APPEND PB_LIST_DEPENDS ${CUR_PB_GEN})
  39. add_custom_command(OUTPUT ${CUR_PB_GEN}
  40. WORKING_DIRECTORY ${PATH}
  41. DEPENDS ${PROTO2TARS} ${_PROTOBUF_PROTOC}
  42. COMMAND ${_PROTOBUF_PROTOC} -I "${PATH}"
  43. "${PB_SRC}" --cpp_out "${PATH}"
  44. COMMENT "${_PROTOBUF_PROTOC} ${PB_SRC} ${PATH} ${CUR_PB_GEN}")
  45. list(APPEND CLEAN_LIST ${PATH}/${PB_H} ${PATH}/${PB_CC})
  46. endforeach ()
  47. set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEAN_LIST}")
  48. set(TARS_TARGET "TARS_${MODULE}")
  49. add_custom_target(${TARS_TARGET} ALL DEPENDS ${PB_LIST_DEPENDS})
  50. add_executable(${MODULE} ${CLEAN_LIST} ${DIR_SRCS})
  51. add_dependencies(${MODULE} ${TARS_TARGET})
  52. else()
  53. add_executable(${MODULE} ${DIR_SRCS})
  54. endif()
  55. if("${DEPS}" STREQUAL "")
  56. add_dependencies(${MODULE} tarsservant tarsutil)
  57. else()
  58. string(REPLACE " " ";" DEP_LIST ${DEPS})
  59. add_dependencies(${MODULE} ${DEP_LIST} tarsservant tarsutil)
  60. endif()
  61. target_link_libraries(${MODULE} tarsservant tarsutil)
  62. if(TARS_SSL)
  63. target_link_libraries(${MODULE} tarsservant tarsutil ${LIB_SSL} ${LIB_CRYPTO})
  64. if(WIN32)
  65. target_link_libraries(${MODULE} Crypt32)
  66. endif()
  67. endif()
  68. if(TARS_HTTP2)
  69. target_link_libraries(${MODULE} ${LIB_HTTP2} ${LIB_PROTOBUF})
  70. endif()
  71. if(TARS_GPERF)
  72. target_link_libraries(${MODULE} ${LIB_GPERF})
  73. endif(TARS_GPERF)
  74. SET(MODULE-TGZ "${CMAKE_BINARY_DIR}/${MODULE}.tgz")
  75. SET(RUN_DEPLOY_COMMAND_FILE "${PROJECT_BINARY_DIR}/run-deploy-${MODULE}.cmake")
  76. FILE(WRITE ${RUN_DEPLOY_COMMAND_FILE} "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/deploy/${MODULE})\n")
  77. IF(WIN32)
  78. # message(${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${MODULE}.exe)
  79. FILE(APPEND ${RUN_DEPLOY_COMMAND_FILE} "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${MODULE}.exe ${PROJECT_BINARY_DIR}/deploy/${MODULE}/)\n")
  80. FILE(APPEND ${RUN_DEPLOY_COMMAND_FILE} "EXECUTE_PROCESS(WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/deploy/ \n COMMAND ${CMAKE_COMMAND} -E tar czfv ${MODULE-TGZ} ${MODULE})\n")
  81. ELSE()
  82. FILE(APPEND ${RUN_DEPLOY_COMMAND_FILE} "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${MODULE} ${PROJECT_BINARY_DIR}/deploy/${MODULE}/)\n")
  83. FILE(APPEND ${RUN_DEPLOY_COMMAND_FILE} "EXECUTE_PROCESS(WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/deploy/ \n COMMAND ${CMAKE_COMMAND} -E tar czfv ${MODULE-TGZ} ${MODULE})\n")
  84. ENDIF()
  85. #执行命令
  86. add_custom_command(OUTPUT ${MODULE-TGZ}
  87. DEPENDS ${MODULE}
  88. COMMAND ${CMAKE_COMMAND} -P ${RUN_DEPLOY_COMMAND_FILE}
  89. COMMENT "call ${RUN_DEPLOY_COMMAND_FILE}")
  90. add_custom_target(${MODULE}-tar DEPENDS ${MODULE-TGZ})
  91. endmacro()
  92. #-----------------------------------------------------------------------