请详细说明cmake中的install()原型,参数含义,作用以及如何使用
时间: 2024-03-17 22:41:27 浏览: 26
CMake中的`install()`函数用于安装生成的目标文件、库文件、二进制文件以及其他文件到指定的目录中。`install()`函数的原型如下:
```
install([TARGETS target1 target2 ...]
[EXPORT export_name]
[[ARCHIVE|LIBRARY|RUNTIME|FRAMEWORK|BUNDLE|PUBLIC_HEADER|PRIVATE_HEADER|RESOURCE]
[DESTINATION <dir>]
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[OPTIONAL]
[EXCLUDE_FROM_ALL]
[NAMELINK_COMPONENT <component>]
[NAMELINK_ONLY]
[NAMELINK_SKIP]
[PREFIX <prefix>]
[INCLUDES DESTINATION <include-dir>]
[CONFIGURATIONS [Debug|Release|...]]
[INSTALL_NAME_DIR <dir>]
[INSTALL_RPATH <dir>]
[INSTALL_RPATH_USE_LINK_PATH]
[BUILD_WITH_INSTALL_RPATH]
[BUILD_WITH_INSTALL_NAME_DIR])
[FILES files...]
[DIRECTORY dir
[DESTINATION <dir>]
[FILE_PERMISSIONS permissions...]
[DIRECTORY_PERMISSIONS permissions...]
[USE_SOURCE_PERMISSIONS]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[EXCLUDE_FROM_ALL]])
```
参数说明如下:
- `TARGETS`: 指定将要被安装的目标。可以是可执行文件、库文件、或其他相关的文件。
- `EXPORT`: 在安装过程中是否导出该目标,以便在其他项目中使用。
- `ARCHIVE|LIBRARY|RUNTIME|FRAMEWORK|BUNDLE|PUBLIC_HEADER|PRIVATE_HEADER|RESOURCE`: 指定目标的类型。
- `DESTINATION`: 指定目标文件的安装路径。
- `PERMISSIONS`: 指定目标文件在安装时的权限。
- `CONFIGURATIONS`: 在指定构建类型时,只安装与之相关的目标。
- `COMPONENT`: 指定组件名称,用于在安装时对目标进行分组。
- `OPTIONAL`: 指定目标是否为可选的。
- `EXCLUDE_FROM_ALL`: 指定目标是否从`make all`中排除。
- `NAMELINK_COMPONENT`: 指定库文件的组件名称。
- `NAMELINK_ONLY`: 指定将库文件的符号链接到其他库文件中。
- `NAMELINK_SKIP`: 指定不将库文件的符号链接到其他库文件中。
- `PREFIX`: 指定文件安装的前缀。
- `INCLUDES DESTINATION`: 指定头文件的安装路径。
- `INSTALL_NAME_DIR`: 指定库文件的安装路径。
- `INSTALL_RPATH`: 指定运行时库文件的搜索路径。
- `INSTALL_RPATH_USE_LINK_PATH`: 在运行时搜索路径中包含目标文件的路径。
- `BUILD_WITH_INSTALL_RPATH`: 指定目标文件是否应该包含`INSTALL_RPATH`。
- `BUILD_WITH_INSTALL_NAME_DIR`: 指定目标文件是否应该包含`INSTALL_NAME_DIR`。
- `FILES`: 指定将要被安装的文件。
- `DIRECTORY`: 指定将要被安装的目录。
- `FILE_PERMISSIONS`: 指定文件在安装时的权限。
- `DIRECTORY_PERMISSIONS`: 指定目录在安装时的权限。
- `USE_SOURCE_PERMISSIONS`: 在安装时使用源文件的权限。
- `EXCLUDE_FROM_ALL`: 指定目标是否从`make all`中排除。
使用`install()`函数时,可以将多个参数组合使用,以满足实际的安装需求。例如,安装一个可执行文件和一个库文件,并将它们分别放置在不同的目录中,可以这样写:
```
install(TARGETS my_executable my_library
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib)
```
此外,还可以使用`install(DIRECTORY <source_dir> DESTINATION <destination_dir>)`命令来安装整个目录。
阅读全文