目录
公共选项
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> [...])










