# spark_install_target # 基于传入的路径/目标进行安装 # 可接受的值为: 安装路径 目标A # 可接受的值为: 安装路径 目标A 目标B 目标C... macro(spark_install_target INSTALL_TARGET_DIR INSTALL_TARGETS) install(TARGETS ${INSTALL_TARGETS} ${ARGN} DESTINATION ${INSTALL_TARGET_DIR}) endmacro(spark_install_target INSTALL_TARGET_DIR INSTALL_TARGETS) # spark_install_file # 基于传入的路径/文件进行安装 # 可接受的值为: 安装路径 文件A # 可接受的值为: 安装路径 文件A 文件B 文件C... macro(spark_install_file INSTALL_FILE_DIR INSTALL_FILE) install(FILES ${INSTALL_FILE} ${ARGN} DESTINATION ${INSTALL_FILE_DIR}) endmacro(spark_install_file INSTALL_FILE_DIR INSTALL_FILE) # spark_install_program # 基于传入的路径/文件进行安装,并自动为其添加可执行权限 # 可接受的值为: 安装路径 文件A # 可接受的值为: 安装路径 文件A 文件B 文件C... macro(spark_install_program INSTALL_PROGRAM_DIR INSTALL_PROGRAM) install(PROGRAMS ${INSTALL_PROGRAM} ${ARGN} DESTINATION ${INSTALL_PROGRAM_DIR}) endmacro(spark_install_program INSTALL_PROGRAM_DIR INSTALL_PROGRAM) # spark_install_directory # 基于传入的路径/目录进行安装 # 可接受的值为: 安装路径 路径A # 可接受的值为: 安装路径 路径A/* 为安装路径A下所有内容 macro(spark_install_directory INSTALL_DIRECTORY_DIR INSTALL_DIRECOTRY) # INSTALL_DIRECOTRY 可能包含 * ? # 1. 找到 '*', 截取,列出目录下所有文件,安装 # 2. 是文件的直接使用 spark_install_file 安装 # 2. 是目录的直接使用 spark_install_directory 安装 # message(FATAL_ERROR "${INSTALL_DIRECTORY_DIR}") # string(FIND [REVERSE]) string(FIND "${INSTALL_DIRECOTRY}" "*" INSTALL_DIRECTORY_FIND_INDEX) # message(FATAL_ERROR "${INSTALL_DIRECTORY_FIND_INDEX}: ${INSTALL_DIRECTORY_DIR}") # file(GLOB # [LIST_DIRECTORIES true|false] [RELATIVE ] [CONFIGURE_DEPENDS] # [...]) if (NOT INSTALL_DIRECTORY_FIND_INDEX EQUAL -1) # string(SUBSTRING ) string(SUBSTRING "${INSTALL_DIRECOTRY}" 0 ${INSTALL_DIRECTORY_FIND_INDEX} INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING) # message(FATAL_ERROR "directory: ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING}") # file(GLOB # [LIST_DIRECTORIES true|false] [RELATIVE ] [CONFIGURE_DEPENDS] # [...]) file(GLOB INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING}/*) list(LENGTH INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST_LENGTH) foreach(item IN LISTS INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST) # message("-> ${item}") if(IS_DIRECTORY ${item}) message("-> ${item} IS_DIRECTORY") # spark_install_directory(${INSTALL_DIRECTORY_DIR} ${item}) install(DIRECTORY ${item} DESTINATION ${INSTALL_DIRECTORY_DIR} USE_SOURCE_PERMISSIONS) else() message("-> ${item} NOT IS_DIRECTORY") spark_install_program(${INSTALL_DIRECTORY_DIR} ${item}) # spark_install_file(${INSTALL_DIRECTORY_DIR} ${item}) endif(IS_DIRECTORY ${item}) endforeach(item IN LISTS INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST) # message(FATAL_ERROR " directory: ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST}") # message(FATAL_ERROR " directory: ${INSTALL_DIRECTORY_FIND_INDEX_SUBSTRING_FILE_GLOB_LIST_LENGTH}") else() # ISSUES: You Must check here # message(FATAL_ERROR "install: ${INSTALL_DIRECTORY_DIR}") install(DIRECTORY ${INSTALL_DIRECOTRY} ${ARGN} DESTINATION ${INSTALL_DIRECTORY_DIR}) endif(NOT INSTALL_DIRECTORY_FIND_INDEX EQUAL -1) endmacro(spark_install_directory INSTALL_DIRECTORY_DIR INSTALL_DIRECOTRY) macro(spark_install_changelog CHANGE_LOG_FILE) set(SOURCE_CHANGE_LOG_FILE ${CHANGE_LOG_FILE}) if (EXISTS ${SOURCE_CHANGE_LOG_FILE}) execute_process(COMMAND test -f ${SOURCE_CHANGE_LOG_FILE} RESULT_VARIABLE changelog_test ) execute_process(COMMAND which gzip RESULT_VARIABLE gzip_test ) if (NOT changelog_test EQUAL 0) message(FATAL_ERROR "NOTE: 不是常规文件: ${SOURCE_CHANGE_LOG_FILE}") endif(NOT changelog_test EQUAL 0) if (NOT gzip_test EQUAL 0) message(FATAL_ERROR "NOTE: 未安装 gzip, 无法压缩 changelog") endif(NOT gzip_test EQUAL 0) # 压缩与安装日志文件 add_custom_command( OUTPUT "${CMAKE_BINARY_DIR}/changelog.gz" COMMAND gzip -cn9 "${SOURCE_CHANGE_LOG_FILE}" > "${CMAKE_BINARY_DIR}/changelog.gz" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" COMMENT "Compressing changelog" ) add_custom_target(changelog ALL DEPENDS "${CMAKE_BINARY_DIR}/changelog.gz") # include(GNUInstallDirs) set(SPARK_INSTALL_CHANGE_LOG_DIR "/usr/share/doc/${PROJECT_NAME}/") install(FILES ${CMAKE_BINARY_DIR}/changelog.gz debian/copyright DESTINATION ${SPARK_INSTALL_CHANGE_LOG_DIR} ) else() message(FATAL_ERROR "未找到: ${SOURCE_CHANGE_LOG_FILE}") endif(EXISTS ${SOURCE_CHANGE_LOG_FILE}) endmacro(spark_install_changelog CHANGE_LOG_FILE)