CMakeLists.txt 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. cmake_minimum_required(VERSION 2.8)
  2. project(tools)
  3. include_directories(${util_SOURCE_DIR}/include)
  4. link_libraries(tarsutil)
  5. function(tars2language TARGET)
  6. set(EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/bin")
  7. include_directories(${PROJECT_SOURCE_DIR}/tarsparse)
  8. aux_source_directory(. DIR_SRCS)
  9. link_libraries(tarsparse)
  10. add_executable(${TARGET} ${DIR_SRCS})
  11. install(TARGETS ${TARGET}
  12. RUNTIME DESTINATION tools)
  13. endfunction()
  14. macro(complice_lex OUT_DEPENDS_LEX_LIST)
  15. set(DEPENDS_LIST)
  16. FILE(GLOB SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/*.l")
  17. set(CLEAN_LIST)
  18. foreach (FILE ${SRC_LIST})
  19. get_filename_component(NAME_WE ${FILE} NAME_WE)
  20. # 生成tars文件
  21. set(LEX_IN ${FILE})
  22. set(LEX_CPP ${NAME_WE}.lex.cpp)
  23. add_custom_command(
  24. OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${LEX_CPP}
  25. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  26. COMMAND flex ${LEX_IN}
  27. COMMENT "flex ${LEX_IN}")
  28. list(APPEND DEPENDS_LIST ${CMAKE_CURRENT_SOURCE_DIR}/${LEX_CPP})
  29. #设置需要清除的文件
  30. get_filename_component(PATH ${FILE} PATH)
  31. list(APPEND CLEAN_LIST ${PATH}/${LEX_CPP})
  32. endforeach (FILE)
  33. set(OUT_DEPENDS_LEX_LIST ${DEPENDS_LIST})
  34. set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEAN_LIST}")
  35. endmacro()
  36. macro(complice_yacc OUT_DEPENDS_YACC_LIST)
  37. set(DEPENDS_LIST)
  38. FILE(GLOB SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/*.y")
  39. set(CLEAN_LIST)
  40. foreach (FILE ${SRC_LIST})
  41. get_filename_component(NAME_WE ${FILE} NAME_WE)
  42. set(YACC_IN ${FILE})
  43. set(YACC_H ${NAME_WE}.tab.hpp)
  44. set(YACC_CPP ${NAME_WE}.tab.cpp)
  45. add_custom_command(
  46. OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${YACC_H}
  47. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  48. COMMAND bison ${YACC_IN} -o ${YACC_CPP}
  49. COMMENT "bison ${YACC_IN} -o ${YACC_CPP}")
  50. list(APPEND DEPENDS_LIST ${CMAKE_CURRENT_SOURCE_DIR}/${YACC_H})
  51. #设置需要清除的文件
  52. get_filename_component(PATH ${FILE} PATH)
  53. list(APPEND CLEAN_LIST ${PATH}/${YACC_H})
  54. list(APPEND CLEAN_LIST ${PATH}/${YACC_CPP})
  55. #if (EXISTS ${PATH}/${NAME_WE}.tab.cpp)
  56. # list(APPEND CLEAN_LIST ${PATH}/${NAME_WE}.tab.cpp)
  57. #endif (EXISTS ${PATH}/${NAME_WE}.tab.cpp)
  58. endforeach (FILE)
  59. set(OUT_DEPENDS_YACC_LIST ${DEPENDS_LIST})
  60. set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEAN_LIST}")
  61. endmacro()
  62. add_subdirectory(tarsgrammar)
  63. add_subdirectory(tarsparse)
  64. add_subdirectory(tars2cpp)
  65. add_subdirectory(tars2python)
  66. add_subdirectory(tars2cs)
  67. add_subdirectory(tars2c)
  68. add_subdirectory(tars2oc)
  69. add_subdirectory(tars2php)
  70. add_subdirectory(tars2android)
  71. add_subdirectory(tars2node)
  72. FIND_PACKAGE(Protobuf)
  73. IF(PROTOBUF_FOUND)
  74. add_subdirectory(pb2tarscpp)
  75. ENDIF()