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

【CMake系列】09-cmake install 一般文件 文件夹 源代码

上一节,我们学习了项目构建后、目标的安装,本节学习的内容是 对于一般文件,文件夹以及源代码的安装

本节的文件依然使用 file(WRITE xxx.xx) 来创建,不依赖额外的文件

本专栏的实践代码全部放在 github 上,欢迎 star !!!

如有问题,欢迎留言、或加群【392784757】交流

文件安装

CMakeLists.txt

cmake_minimum_required(VERSION 3.20)project(install_file)file(WRITE a.h "")
file(WRITE b.h "")# 文件安装到指定目录
install(FILES a.h b.h DESTINATION include)# 不存在 不报错, 目标可选 
install(FILES c.h DESTINATION inc OPTIONAL)# 文件类型 TYPE DOC LIB INCLUDE
include(GNUInstallDirs) # 引入后 才能使用CMAKE_INSTALL_DATAROOTDIR
message("{CMAKE_INSTALL_DATAROOTDIR}")
install(FILES a.h TYPE DOC) # dataroot_dir /doc
install(FILES b.h TYPE LIB) # lib
install(FILES c.h TYPE INCLUDE) # include# 文件权限  windows 目录无效
# 默认权限 OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ
install(FILES a.h DESTINATION pub
PERMISSIONS
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_READ GROUP_WRITE GROUP_EXECUTE
WORLD_READ WORLD_WRITE WORLD_EXECUTE
)

注意事项

  1. installl(FILES 文件名 DESTINATION 目标位置)
    可以使用 OPTIONAL ,当文件不存在时,不报错;否则会报错

  2. FILES 提供的类型 通过TYPE 指定,有 DOC LIB INCLUDE ,其中 include(GNUInstallDirs) # 引入后 才能使用CMAKE_INSTALL_DATAROOTDIR

  3. 文件权限问题==【只针对linux,windows 无效】==
    文件的权限分为三级 owner 、group、 world,具体分 read writer execute,
    默认权限只有 OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ,可读
    因此在安装某些文件时,如需指定可执行,需要指定 PERMISSIONS 进行添加

文件夹安装

cmake_minimum_required(VERSION 3.22)project(install_dir)file(WRITE doc/index.html "")
file(WRITE doc/doc.html "")
file(WRITE doc/doc2.htm "")
file(WRITE doc/doc.cc "")
file(WRITE doc/doc.c "")
file(WRITE doc/sub/doc.html "")
file(WRITE doc/include/doc.h "")
file(WRITE doc/.svn/config "")
file(WRITE doc/.git/config "")# doc 类型 指定安装路径 share/doc
# 安装doc目录下所有文件,包含子目录中 空子目录也创建
install(DIRECTORY doc TYPE DOC)
install(DIRECTORY doc DESTINATION doc2)# 过滤只复制 *.html 并且创建所有子目录
install(DIRECTORY doc DESTINATION html_doc
FILES_MATCHING
PATTERN "*.html"
PATTERN "*.html"
)# 排除.git 和 .svn
install(DIRECTORY doc DESTINATION no_git_doc
PATTERN ".git" EXCLUDE)install(DIRECTORY doc DESTINATION src 
FILES_MATCHING
PATTERN "*.cc"
PATTERN "*.c"
PATTERN ".git" EXCLUDE
PATTERN ".svn" EXCLUDE
)

注意事项

  1. install(DIRECTORY 文件夹名 DESTINATION 路径)
    可以通过
    FILES_MATCHING
    PATTERN “xx.xx”
    PATTERN “xx.xx” EXCLUE
    来细化 安装的 文件夹,如使用EXCLUE 排除 无关文件夹, 常见 如 .git .svn 等
    以及过滤文件夹中的文件

安装代码

CMakeLists.txt

cmake_minimum_required(VERSION 3.20)project(install_code)FILE(WRITE a.h "")
FILE(WRITE b.h "")install(CODE "message(\"begin install\")")
install(FILES a.h TYPE INCLUDE)
install(CODE "message(\"a.h install success\")")
install(FILES b.h TYPE INCLUDE)
install(CODE "message(\"b.h install success\")")# 写入安装的时间
install(CODE [=[string(TIMESTAMP now "%Y-%m-%d %H:%M:%S")
message(${now})
FILE(APPEND install_log.txt "${now}\n")
]=])

可以通过 install(CODE )输出安装过程中的状态
安装代码的具体安装类型 依然是 INCLUDE LIB DOC 这三种

这一块的学习,可以找一些著名的项目 参考他们的写法,进行学习,根据自己的情况进行设置

相关文章:

  • 必应bing国内广告怎样开户投放呢?
  • dotenv 配置踩坑-显示undefined
  • gitlab-jh的docker容器自动退出/gitlab镜像版本/升级问题
  • 安卓手机APP开发_____通过设备管理政策增强安全性
  • python中的预编译正则表达式
  • 03--nginx架构实战
  • Matlab解决矩阵微分方程建模(代码开源)
  • elasticsearch安装与使用(2)-基于term匹配的简单搜索引擎搭建
  • debian常用命令
  • 一键开启:盲盒小程序里的梦幻奇遇
  • The 18th Northeast Collegiate Programming Contest(5/9/13)
  • 【ARM Cache 及 MMU 系列文章 6 -- Cache 寄存器 CTR | CLIDR | CCSIDR | CSSELR 使用详解 1】
  • 记忆化搜索汇总
  • JS逆向-B站评论数据w_rid参数和wts参数
  • 人机交互中的阴差阳错
  • 2017年终总结、随想
  • Apache Spark Streaming 使用实例
  • CSS盒模型深入
  • ES学习笔记(12)--Symbol
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • SpringBoot几种定时任务的实现方式
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue全家桶实现一个Web App
  • windows下mongoDB的环境配置
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 聚类分析——Kmeans
  • 前端代码风格自动化系列(二)之Commitlint
  • 小程序01:wepy框架整合iview webapp UI
  • 一个项目push到多个远程Git仓库
  • 在Mac OS X上安装 Ruby运行环境
  • 在Unity中实现一个简单的消息管理器
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​secrets --- 生成管理密码的安全随机数​
  • ​插件化DPI在商用WIFI中的价值
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #Z2294. 打印树的直径
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)Jupyter Notebook 下载及安装
  • (2.2w字)前端单元测试之Jest详解篇
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Ruby)Ubuntu12.04安装Rails环境
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net IE10 _doPostBack 未定义
  • .NET技术成长路线架构图
  • .py文件应该怎样打开?
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @PostConstruct 注解的方法用于资源的初始化