当前位置: 首页 > news >正文

CMake 中 install 的使用原因和使用方法

一、为什么要使用 install

在 CMake 中,install 命令的作用是定义项目在安装(部署)时应该安装哪些文件、以及安装到哪里

平时用 cmake + make 编译后,生成的文件默认存在构建目录中,比如 build/,但这还不是真正意义上的“安装”——如果你要把这个程序交付给用户,或者在系统中注册可执行文件、库、头文件等,你就需要使用 CMake 的 install 命令。

主要原因:

  1. 统一部署流程
    无论是 Linux、Windows 还是 macOS,install 都能以跨平台的方式定义安装规则。

  2. 安装到标准系统目录
    例如:

    • 可执行文件:/usr/local/bin
    • 库文件:/usr/local/lib
    • 头文件:/usr/local/include
      这些路径可以由用户通过 CMAKE_INSTALL_PREFIX 自定义。
  3. 配合打包工具
    install 规则可以直接被 cpack 等工具使用,生成 .deb, .rpm, .zip, .tar.gz 等分发包。

  4. 多组件安装支持
    你可以指定不同的安装组件,方便用户选择安装哪些部分(比如只安装可执行文件,不安装开发头文件)。


二、install 的基本用法

CMakeLists.txt 中定义 install 规则的常见形式如下:

1. 安装可执行文件 / 库

add_executable(myapp main.cpp)
install(TARGETS myappRUNTIME DESTINATION bin      # 可执行文件安装目录
)

对于库:

add_library(mylib SHARED lib.cpp)
install(TARGETS mylibLIBRARY DESTINATION lib      # 共享库安装目录ARCHIVE DESTINATION lib      # 静态库安装目录
)

2. 安装头文件或普通文件

install(FILES myheader.hDESTINATION include
)

3. 安装整个目录

install(DIRECTORY src/include/DESTINATION includeFILES_MATCHING PATTERN "*.h"
)

三、安装位置控制

安装的位置由变量 CMAKE_INSTALL_PREFIX 控制,默认在 Linux/Unix 为 /usr/local,在 Windows 通常是 C:/Program Files/项目名

例如:

cmake -DCMAKE_INSTALL_PREFIX=/opt/myproject ..
make
make install

这样文件会安装到:

/opt/myproject/bin
/opt/myproject/lib
/opt/myproject/include

四、安装组件(可选)

你可以为不同的安装内容指定组件,这样用户可以选择只安装某个组件:

install(TARGETS myappRUNTIME DESTINATION binCOMPONENT runtime
)install(FILES myheader.hDESTINATION includeCOMPONENT devel
)

在安装时可以:

make install COMPONENT=runtime

五、常见完整示例

假设我们有一个简单工程:

project/
│── src/main.cpp
│── src/lib.cpp
│── include/lib.h
│── CMakeLists.txt

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(MyProject)add_library(mylib src/lib.cpp)
add_executable(myapp src/main.cpp)
target_link_libraries(myapp PRIVATE mylib)# 安装库
install(TARGETS mylibLIBRARY DESTINATION libARCHIVE DESTINATION lib
)# 安装可执行文件
install(TARGETS myappRUNTIME DESTINATION bin
)# 安装头文件
install(FILES include/lib.hDESTINATION include
)

构建 & 安装:

mkdir build && cd build
cmake ..
make
sudo make install

效果:

/usr/local/bin/myapp
/usr/local/lib/libmylib.so
/usr/local/include/lib.h

六、总结

使用原因:

  • 将编译产物部署到标准目录
  • 跨平台安装文件
  • 与打包工具集成
  • 支持模块化安装

使用方法:

  • install(TARGETS ...) 安装目标文件(可执行、库等)
  • install(FILES ...) 安装特定文件
  • install(DIRECTORY ...) 安装目录
  • 通过 CMAKE_INSTALL_PREFIX 控制安装位置
  • 使用 COMPONENT 灵活选择安装部分
http://www.dtcms.com/a/609999.html

相关文章:

  • 网站宝 添加二级域名怎样在工商局网站做申请登记
  • langchain langGraph 中streaming 流式输出 stream_mode
  • C语言在线编译 | 提供便捷高效的编程体验
  • 自建开发工具IDE(三)仙盟在线文件格式功能——东方仙盟炼气期
  • Vue 3 + Vite 集成 Spring Boot 完整部署指南 - 前后端一体化打包方案
  • 自己的网站网站项目ppt怎么做
  • 保健品网站建设策划书太原广告公司
  • 数据库知识整理——SQL数据查询(2)
  • DAPO(Dynamic sAmpling Policy Optimization)
  • Java实现检测本地指定路径下某一个程序是否在运行
  • 酒店网站模板设计方案威联通231p做网站
  • 网站建设解析无锡网站服务
  • C++中有双向映射数据结构吗?Key和Value能否双向查找?
  • 在Java/Android中,List的属性和方法
  • Python 命令行入门指南:从零到一掌握终端操作
  • FunRec-Task3
  • 住房和城乡建设部网站办事大厅做点击率的网站
  • 泉企业网站建设wordpress轻量级主题
  • 【Qt】多线程学习笔记
  • 做旅游景点网站的目的和意义怎么上传网站地图
  • 判断电脑和手机访问网站怎么选择郑州网站建设
  • Java的编译器是用什么语言写的 | 深入探讨Java编译器的实现原理与技术细节
  • 小麦高分子量谷蛋白(HMW-GS)完整提取流程
  • PostIn从初级到进阶(5) - 如何导入PostMan数据,实现数据迁移
  • LeetCode 面试经典 150_二叉树_二叉树展开为链表(74_114_C++_中等)
  • 航空电子全双工交换式以太网(Avionics Full DupleX switched Ethernet,AFDX)
  • 网站建设资费怎么做网站的浏览量统计
  • SpringBoot16-@Configuration 类
  • 【EGO-Planner自主无人机】在编译EGO-Planner源码时遇到的问题
  • 农业无人机实训教学转型—虚拟仿真破解“三高三难”