include(CMakeParseArguments) # zadd_library( # # # #################### 目标文件 ################# # TARGET # ... # # # #################### 依赖 #################### # DEPENDENCIES # ... # # # #################### 头文件路径 ############### # INCLUDE_DIRECTORIES # ... # # # #################### 链接的第三方库 ############ # LINK_LIBRARIES # ... # # # #################### 源文件 ################## # SRC # ... # ) function(zadd_library) set(oneValueArgs NAME TARGET) set(multiValueArgs INSTALL SRC DEPENDENCIES DEFINES LINK_LIBRARIES LINK_DIRECTORIES INCLUDE_DIRECTORIES) cmake_parse_arguments(ZAL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) message("=================================================================") message("= add_library: ${ZAL_TARGET}") message("=================================================================") message("CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}") message("CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}") if(ZAL_TARGET) message("ADD TARGET:${ZAL_TARGET}") else() message(FATAL_ERROR,"ZAL not set target") endif() if(ZAL_INSTALL) message("INSTALL : ${ZAL_INSTALL}") endif() if(ZAL_SRC) # message("SRC: ${ZAL_SRC}") # message("SRC:") # foreach(EACH ${ZAL_SRC}) # message(" ${EACH}") # endforeach(EACH) else() message(FATAL_ERROR,"ZAL not set src") endif() add_library(${ZAL_TARGET} ${ZAL_SRC}) if(ZAL_DEFINES) message("DEFINES:") foreach(EACH ${ZAL_DEFINES}) message(" ${EACH}") endforeach(EACH) target_compile_definitions(${ZAL_TARGET} PRIVATE ${ZAL_DEFINES}) endif() if(ZAL_DEPENDENCIES) message("DEPENDENCIES:") foreach(EACH ${ZAL_DEPENDENCIES}) message(" ${EACH}") endforeach(EACH) add_dependencies(${ZAL_TARGET} ${ZAL_DEPENDENCIES}) endif() if(ZAL_LINK_LIBRARIES) message("LINK_LIBRARIES:") foreach(EACH ${ZAL_LINK_LIBRARIES}) message(" ${EACH}") endforeach(EACH) target_link_libraries(${ZAL_TARGET} ${ZAL_LINK_LIBRARIES}) endif() if(ZAL_LINK_DIRECTORIES) message("LINK_DIRECTORIES:") foreach(EACH ${ZAL_LINK_DIRECTORIES}) message(" ${EACH}") endforeach(EACH) target_link_directories(${ZAL_TARGET} PRIVATE ${ZAL_LINK_DIRECTORIES}) endif() if(ZAL_INCLUDE_DIRECTORIES) message("INCLUDE_DIRECTORIES:") foreach(EACH ${ZAL_INCLUDE_DIRECTORIES}) message(" ${EACH}") endforeach(EACH) target_include_directories(${ZAL_TARGET} PRIVATE ${ZAL_INCLUDE_DIRECTORIES}) endif() if(ZAL_INSTALL) install(TARGETS ${ZAL_TARGET} DESTINATION ${ZAL_INSTALL}) endif() message("") message("") endfunction(zadd_library) function(zadd_share_library) set(oneValueArgs NAME TARGET) set(multiValueArgs INSTALL SRC DEPENDENCIES DEFINES LINK_LIBRARIES LINK_DIRECTORIES INCLUDE_DIRECTORIES) cmake_parse_arguments(ZAL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) message("=================================================================") message("= add_library: ${ZAL_TARGET}") message("=================================================================") message("CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}") message("CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}") if(ZAL_TARGET) message("ADD TARGET:${ZAL_TARGET}") else() message(FATAL_ERROR,"ZAL not set target") endif() if(ZAL_INSTALL) message("INSTALL : ${ZAL_INSTALL}") endif() if(ZAL_SRC) # message("SRC: ${ZAL_SRC}") # message("SRC:") # foreach(EACH ${ZAL_SRC}) # message(" ${EACH}") # endforeach(EACH) else() message(FATAL_ERROR,"ZAL not set src") endif() add_library(${ZAL_TARGET} SHARED ${ZAL_SRC}) if(ZAL_DEFINES) message("DEFINES:") foreach(EACH ${ZAL_DEFINES}) message(" ${EACH}") endforeach(EACH) target_compile_definitions(${ZAL_TARGET} PRIVATE ${ZAL_DEFINES}) endif() if(ZAL_DEPENDENCIES) message("DEPENDENCIES:") foreach(EACH ${ZAL_DEPENDENCIES}) message(" ${EACH}") endforeach(EACH) add_dependencies(${ZAL_TARGET} ${ZAL_DEPENDENCIES}) endif() if(ZAL_LINK_LIBRARIES) message("LINK_LIBRARIES:") foreach(EACH ${ZAL_LINK_LIBRARIES}) message(" ${EACH}") endforeach(EACH) target_link_libraries(${ZAL_TARGET} ${ZAL_LINK_LIBRARIES}) endif() if(ZAL_LINK_DIRECTORIES) message("LINK_DIRECTORIES:") foreach(EACH ${ZAL_LINK_DIRECTORIES}) message(" ${EACH}") endforeach(EACH) target_link_directories(${ZAL_TARGET} PRIVATE ${ZAL_LINK_DIRECTORIES}) endif() if(ZAL_INCLUDE_DIRECTORIES) message("INCLUDE_DIRECTORIES:") foreach(EACH ${ZAL_INCLUDE_DIRECTORIES}) message(" ${EACH}") endforeach(EACH) target_include_directories(${ZAL_TARGET} PRIVATE ${ZAL_INCLUDE_DIRECTORIES}) endif() if(ZAL_INSTALL) install(TARGETS ${ZAL_TARGET} DESTINATION ${ZAL_INSTALL}) endif() message("") message("") endfunction(zadd_share_library)