Cmake提供了install关键字,用于对应make install功能。安装的文件包括可执行文件、静态库、动态库、文件、目录、脚本文件。
install(TARGETS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])
CONFIGURATIONS:Debug或Release
ARCHIVE :安装文件name中的所有静态库类型文件,指定后续的安装路径
LIBRARY :安装文件name中的所有动态库类型文件,指定后续的安装路径
RUNTIME :安装文件name中的所有可执行文件,指定后续的安装路径
PRIVATE_HEADER :私有头文件安装
PUBLIC_HEADER :公有头文件安装
若路径尚未指定,则会安装到系统默认对应的路径中,例如库文件会默认安装到/usr/local/lib/,但在使用make install时要附带sudo属性,否则会提示没有权限
to "/usr/local/lib/libtest_lib.so.1.2.3.4": Permission denied.
安装库文件:TARGETS
采用TARGETS安装
安装路径可自定义
install(TARGETS ${SOURCE_LIB}
CONFIGURATIONS ${CMAKE_BUILD_TYPE} # Debug 或 Release
ARCHIVE DESTINATION ${PROJECT_SOURCE_DIR}/target/${CMAKE_BUILD_TYPE}/staticLib #静态库安装路径
LIBRARY DESTINATION ${PROJECT_SOURCE_DIR}/target/${CMAKE_BUILD_TYPE}/sharedLib) #动态库安装路径
安装可执行程序:TARGETS
采用TARGETS安装
安装路径可自定义
install(TARGETS ${PROJECT_APP}
CONFIGURATIONS ${CMAKE_BUILD_TYPE}
RUNTIME DESTINATION ${PROJECT_SOURCE_DIR}/target/${CMAKE_BUILD_TYPE})
安装文件夹:DIRECTORY
采用DIRECTORY安装,对应的文件夹以及里面的文件会复制到安装的指定路径中
安装路径可自定义
install(DIRECTORY ${PROJECT_SOURCE_DIR}/file
DESTINATION ${PROJECT_SOURCE_DIR}/target)
安装文件:FILES或PROGRAMS
FILES为普通文件,PROGRAMS为非目标程序,例如shell脚本。
官网有详细说明:
https://cmake.org/cmake/help/v3.15/command/install.html?highlight=install
The PROGRAMS form is identical to the FILES form except that the default permissions for the installed file also include OWNER_EXECUTE, GROUP_EXECUTE, and WORLD_EXECUTE. This form is intended to install programs that are not targets, such as shell scripts. Use the TARGETS form to install targets built within the project.
PERMISSIONS:后面跟着赋予的权限,有效的权限官网有详细说明
PERMISSIONS
Specify permissions for installed files. Valid permissions are OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ, GROUP_WRITE, GROUP_EXECUTE, WORLD_READ, WORLD_WRITE, WORLD_EXECUTE, SETUID, and SETGID. Permissions that do not make sense on certain platforms are ignored on those platforms.
安装路径可自定义
# 安装文件,可读可写
install(FILES ${PROJECT_SOURCE_DIR}/testfile.txt
DESTINATION ${PROJECT_SOURCE_DIR}/target
PERMISSIONS OWNER_READ OWNER_WRITE)
# 安装shell脚本,只读
install(PROGRAMS ${PROJECT_SOURCE_DIR}/testsh.sh
DESTINATION ${PROJECT_SOURCE_DIR}/target
PERMISSIONS OWNER_READ OWNER_EXECUTE)
安装后的文件属性
-rw------- 1 ghost ghost 0 10月 18 10:30 testfile.txt
-r-x------ 1 ghost ghost 27 10月 18 10:30 testsh.sh*