BuildTarsCpp.cmake 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. macro(build_tars_server MODULE DEPS)
  2. project(${MODULE})
  3. include_directories(./)
  4. aux_source_directory(. DIR_SRCS)
  5. FILE(GLOB TARS_LIST "${CMAKE_CURRENT_SOURCE_DIR}/*.tars")
  6. set(TARS_LIST_DEPENDS)
  7. if (TARS_LIST)
  8. set(CLEAN_LIST)
  9. foreach (TARS_SRC ${TARS_LIST})
  10. get_filename_component(NAME_WE ${TARS_SRC} NAME_WE)
  11. set(TARS_H ${NAME_WE}.h)
  12. set(CUR_TARS_GEN ${CMAKE_CURRENT_SOURCE_DIR}/${TARS_H})
  13. LIST(APPEND TARS_LIST_DEPENDS ${CUR_TARS_GEN})
  14. add_custom_command(OUTPUT ${CUR_TARS_GEN}
  15. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  16. DEPENDS ${TARS2CPP}
  17. COMMAND ${TARS2CPP} ${TARS_SRC}
  18. COMMENT "${TARS2CPP} ${TARS_SRC}")
  19. list(APPEND CLEAN_LIST ${CMAKE_CURRENT_SOURCE_DIR}/${TARS_H})
  20. endforeach ()
  21. set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEAN_LIST}")
  22. set(TARS_TARGET "TARS_${MODULE}")
  23. add_custom_target(${TARS_TARGET} ALL DEPENDS ${TARS_LIST_DEPENDS} tars2cpp)
  24. add_executable(${MODULE} ${DIR_SRCS})
  25. add_dependencies(${MODULE} ${TARS_TARGET})
  26. else(TARS_LIST)
  27. add_executable(${MODULE} ${DIR_SRCS})
  28. endif(TARS_LIST)
  29. if("${DEPS}" STREQUAL "")
  30. add_dependencies(${MODULE} tarsservant tarsutil)
  31. else()
  32. string(REPLACE " " ";" DEP_LIST ${DEPS})
  33. add_dependencies(${MODULE} ${DEP_LIST} tarsservant tarsutil)
  34. endif()
  35. target_link_libraries(${MODULE} tarsservant tarsutil)
  36. if(TARS_SSL)
  37. target_link_libraries(${MODULE} tarsservant tarsutil ${LIB_SSL} ${LIB_CRYPTO})
  38. if(WIN32)
  39. target_link_libraries(${MODULE} Crypt32)
  40. endif()
  41. endif()
  42. if(TARS_HTTP2)
  43. target_link_libraries(${MODULE} ${LIB_HTTP2})
  44. endif()
  45. if(TARS_GPERF)
  46. target_link_libraries(${MODULE} ${LIB_GPERF})
  47. endif(TARS_GPERF)
  48. SET(MODULE-TGZ "${CMAKE_BINARY_DIR}/${MODULE}.tgz")
  49. SET(RUN_DEPLOY_COMMAND_FILE "${PROJECT_BINARY_DIR}/run-deploy-${MODULE}.cmake")
  50. FILE(WRITE ${RUN_DEPLOY_COMMAND_FILE} "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/deploy/${MODULE})\n")
  51. IF(WIN32)
  52. # message(${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}/${MODULE}.exe)
  53. 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")
  54. 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")
  55. ELSE()
  56. FILE(APPEND ${RUN_DEPLOY_COMMAND_FILE} "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${MODULE} ${PROJECT_BINARY_DIR}/deploy/${MODULE}/)\n")
  57. 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")
  58. ENDIF()
  59. #执行命令
  60. add_custom_command(OUTPUT ${MODULE-TGZ}
  61. DEPENDS ${MODULE}
  62. COMMAND ${CMAKE_COMMAND} -P ${RUN_DEPLOY_COMMAND_FILE}
  63. COMMENT "call ${RUN_DEPLOY_COMMAND_FILE}")
  64. add_custom_target(${MODULE}-tar DEPENDS ${MODULE-TGZ})
  65. endmacro()
  66. #-----------------------------------------------------------------------