You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.3 KiB

12 months ago
  1. include(CMakeParseArguments)
  2. # zadd_executable(
  3. #
  4. # # #################### 目标文件 #################
  5. # TARGET
  6. # ...
  7. #
  8. # # #################### 依赖 ####################
  9. # DEPENDENCIES
  10. # ...
  11. #
  12. # # #################### 头文件路径 ###############
  13. # INCLUDE_DIRECTORIES
  14. # ...
  15. #
  16. # # #################### 链接的第三方库 ############
  17. # LINK_LIBRARIES
  18. # ...
  19. #
  20. # # #################### 源文件 ##################
  21. # SRC
  22. # ...
  23. # )
  24. function(zadd_executable)
  25. set(oneValueArgs NAME TARGET)
  26. set(multiValueArgs
  27. INSTALL
  28. SRC
  29. DEFINES
  30. DEPENDENCIES
  31. LINK_LIBRARIES
  32. LINK_DIRECTORIES
  33. INCLUDE_DIRECTORIES)
  34. cmake_parse_arguments(ZADD_EXECUTABLE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  35. message("=================================================================")
  36. message("= zadd_executable:${ZADD_EXECUTABLE_TARGET}")
  37. message("=================================================================")
  38. if(ZADD_EXECUTABLE_TARGET)
  39. message("ADD TARGET: ${ZADD_EXECUTABLE_TARGET}")
  40. else()
  41. message(FATAL_ERROR,"zadd_executable not set target")
  42. endif()
  43. message("CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}")
  44. message("CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
  45. if(ZADD_EXECUTABLE_INSTALL)
  46. message("INSTALL : ${ZADD_EXECUTABLE_INSTALL}")
  47. endif()
  48. if(ZADD_EXECUTABLE_SRC)
  49. # message("SRC: ${ZADD_EXECUTABLE_SRC}")
  50. # foreach(EACH ${ZADD_EXECUTABLE_SRC})
  51. # message(" ${EACH}")
  52. # endforeach(EACH)
  53. else()
  54. message(FATAL_ERROR,"zadd_executable not set src")
  55. endif()
  56. add_executable(${ZADD_EXECUTABLE_TARGET} ${ZADD_EXECUTABLE_SRC})
  57. if(ZADD_EXECUTABLE_DEFINES)
  58. message("DEFINES:")
  59. foreach(EACH ${ZADD_EXECUTABLE_DEFINES})
  60. message(" ${EACH}")
  61. endforeach(EACH)
  62. target_compile_definitions(${ZADD_EXECUTABLE_TARGET} PRIVATE ${ZADD_EXECUTABLE_DEFINES})
  63. endif()
  64. if(ZADD_EXECUTABLE_DEPENDENCIES)
  65. message("DEPENDENCIES: ")
  66. foreach(EACH ${ZADD_EXECUTABLE_DEPENDENCIES})
  67. message(" ${EACH}")
  68. endforeach(EACH)
  69. add_dependencies(${ZADD_EXECUTABLE_TARGET} ${ZADD_EXECUTABLE_DEPENDENCIES})
  70. endif()
  71. if(ZADD_EXECUTABLE_LINK_LIBRARIES)
  72. message("LINK_LIBRARIES:")
  73. foreach(EACH ${ZADD_EXECUTABLE_LINK_LIBRARIES})
  74. message(" ${EACH}")
  75. endforeach(EACH)
  76. target_link_libraries(${ZADD_EXECUTABLE_TARGET} ${ZADD_EXECUTABLE_LINK_LIBRARIES})
  77. endif()
  78. if(ZADD_EXECUTABLE_LINK_DIRECTORIES)
  79. message("LINK_DIRECTORIES:")
  80. foreach(EACH ${ZADD_EXECUTABLE_LINK_DIRECTORIES})
  81. message(" ${EACH}")
  82. endforeach(EACH)
  83. target_link_directories(${ZADD_EXECUTABLE_TARGET} PRIVATE ${ZADD_EXECUTABLE_LINK_DIRECTORIES})
  84. endif()
  85. if(ZADD_EXECUTABLE_INCLUDE_DIRECTORIES)
  86. message("INCLUDE_DIRECTORIES:")
  87. foreach(EACH ${ZADD_EXECUTABLE_INCLUDE_DIRECTORIES})
  88. message(" ${EACH}")
  89. endforeach(EACH)
  90. target_include_directories(${ZADD_EXECUTABLE_TARGET} PRIVATE ${ZADD_EXECUTABLE_INCLUDE_DIRECTORIES})
  91. endif()
  92. message("")
  93. message("")
  94. if(ZADD_EXECUTABLE_INSTALL)
  95. install(TARGETS ${ZADD_EXECUTABLE_TARGET} DESTINATION ${ZADD_EXECUTABLE_INSTALL})
  96. endif()
  97. endfunction(zadd_executable)