CMake Day 6 —— 安装规则(install rules)

CMake Day 6 —— 安装规则(install rules)

在CMake中,安装是指将二进制文件、库文件和头文件等安装到指定目录中。

语法:

install(TARGETS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])

该命令是为项目配置安装规则。在项目中会按照install()命令调用的顺序执行按照规则。

首先解释几个选项:

  • DESTINATION:指定要安装到的目录,如果是相对路径,则是相对于CMAKE_INSTALL_PREFIX变量的,如果是绝对路径,则直接使用,由于cpack的安装程序生成器不支持绝对路径,所有最好使用相对路径。
  • PERMISSIONS: 指定安装文件的权限,有效权限有OWNER_READOWNER_WRITEOWNER_EXECUTEGROUP_READGROUP_WRITEGROUP_EXECUTEWORLD_READWORLD_WRITEWORLD_EXECUTESETUIDSETGID。在某些平台上没有意义的权限将被忽略。
  • CONFIGURATIONS: 指定安装规则适用的构建配置(Debug, Relase等),如果要为Debug和Relase单独配置安装路径,如下:
install(TARGETS target
        CONFIGURATIONS Debug
        RUNTIME DESTINATION Debug/bin)
install(TARGETS target
        CONFIGURATIONS Release
        RUNTIME DESTINATION Release/bin)
  • EXCLUDE_FROM_ALL: 指定该文件从完整安装中排除。
  • RENAME: 指定已安装文件的名称,该名称可能与原始文件不同。仅当命令安装了单个文件时,才允许重命名.

安装二进制文件

语法:

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> ...]]
        )

常用参数:

  • ARCHIVE: 静态库
  • LIBRARY: 动态库
  • RUNTIME: 可执行文件

如果没有指定下列目录的路径,则使用内置的默认值:

Target Variable Built-In Default
RUNTIME ${CMAKE_INSTALL_BINDIR} bin
LIBRARY ${CMAKE_INSTALL_LIBDIR} lib
ARCHIVE ${CMAKE_INSTALL_LIBDIR} lib
PRIVATE_HEADER ${CMAKE_INSTALL_INCLUDEDIR} include
PUBLIC_HEADER ${CMAKE_INSTALL_INCLUDEDIR} include

安装文件和目录

语法:

install(<FILES|PROGRAMS> files...
        TYPE <type> | DESTINATION <dir>
        [PERMISSIONS permissions...]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>]
        [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])

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...]] [...])

当通过命令行使用cmake --install .或者make install时,将会运行安装步骤。如果要指定安装的根目录,需要使用cmake --install --prefix "/home/user/installdir" .来指定。

上一篇:atpg flow(tessent)


下一篇:prometheus 告警模板解读