目录
- 公共选项
- 安装目标
- 安装文件
- 安装目录
- 安装导出
公共选项
install有多个签名,这些签名公用的选项有以下:
- DESTINATION:指定文件要安装的目录,可以是相对路径或绝对路径。
- 相对路径:会使用 CMAKE_INSTALL_PREFIX 作为前缀路径,即
${CMAKE_INSTALL_PREFIX}/<your_path>
,指定路径不存在的话可以自动创建。如果在cpack中使用,路径使用CPACK_PACKAGING_INSTALL_PREFIX
- 绝对路径
- 相对路径:会使用 CMAKE_INSTALL_PREFIX 作为前缀路径,即
- COMPONENT:指定一个与安装规则相关联的安装组件名,如"lib", "runtime"等。如果在安装期间指定安装组件,就会只安装与相关的组件。举例说明:
install(
TARGETS cxx17 cxx17_test
RUNTIME DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/bin COMPONENT runtime
ARCHIVE DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/lib COMPONENT lib
)
这里编译生成了可执行文件和静态库,可以通过指定COMPOENNT只安装需要的lib,RUNTIME没有安装。
- PERMISSIONS:指定要安装的文件的权限,指定哪个权限就有哪个权限,可以指定多个,如
RUNTIME DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ
- RENAME:对安装的文件重命令,仅在只有一个文件被安装的条件下才有效。但是以下示例并没有生效
-
install( TARGETS cxx17 ARCHIVE DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/lib PERMISSIONS GROUP_WRITE RENAME dasha)
- OPTIONAL:安装文件不存在不用报错,继续执行
- EXCLUDE_FROM_ALL
安装目标
install(TARGETS targets... [EXPORT <export-name>]
[[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE| # 从这儿
PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]
[DESTINATION <dir>]
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[NAMELINK_COMPONENT <component>]
[OPTIONAL] [EXCLUDE_FROM_ALL]
[NAMELINK_ONLY|NAMELINK_SKIP]
] [...] # 到这儿 是一个文件的安装规则
[INCLUDES DESTINATION [<dir> ...]]
)
- 签名:
- targets可以是多个,比如可执行文件,动态或静态库
- 可以分别配置多个文件的安装规则
- 关键字:
- ARCHIVE:静态库,如.a文件,.lib等
- LIBRARY:共享库,so
- RUNTIME:可执行文件
- PUBLIC_HEADER:如果给目标设置了PUBLIC_HEADER属性,可以通过该选项安装PUBLIC_HEADER属性指定的文件到目录文件
安装文件
install(<FILES|PROGRAMS> files...
TYPE <type> | DESTINATION <dir>
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])
将FILES指定的文件安装到DESTINATION指定的路径。DESTINATION不存的话可以自动创建。
RENAME:如果FILES指定了多个文件,这里会报错,目前自测只有一个文件时可以在安装时重命名文件
安装目录
install(DIRECTORY dirs...
TYPE <type> | DESTINATION <dir>
[FILE_PERMISSIONS permissions...]
[DIRECTORY_PERMISSIONS permissions...]
[USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>] [EXCLUDE_FROM_ALL]
[FILES_MATCHING]
[[PATTERN <pattern> | REGEX <regex>]
[EXCLUDE] [PERMISSIONS permissions...]] [...])
- 将由DIRECTORY 指定的一个或多个目录安装到DESTINATION指定的目录下。要注意的是指定到目录这一级还是目录下,拷贝的路径不一样
- FILE_PERMISSIONS和DIRECTORY_PERMISSIONS 指定安装之后的权限
- PATTERN和REGEX:指定用于过滤的正则表达式,PERMISSIONS用于指定经过滤后的文件权限
安装导出
install(EXPORT <export-name> DESTINATION <dir>
[NAMESPACE <namespace>] [[FILE <name>.cmake]|
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[EXPORT_LINK_INTERFACE_LIBRARIES]
[COMPONENT <component>]
[EXCLUDE_FROM_ALL])
install(EXPORT_ANDROID_MK <export-name> DESTINATION <dir> [...])