首页 > 其他分享 >【CMake系列】09-cmake install 一般文件 文件夹 代码文件

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

时间:2024-06-12 13:45:58浏览次数:18  
标签:FILES 文件 file READ doc 09 WRITE 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 这三种

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

标签:FILES,文件,file,READ,doc,09,WRITE,install
From: https://www.cnblogs.com/caibucai/p/18243781

相关文章

  • 《吸血鬼幸存者》游戏启动障碍:应对缺失DLL文件的解决方案
    如果你在尝试运行《吸血鬼幸存者》(VampireSurvivors)时遇到提示缺少特定的DLL文件问题,别急!通过重新安装、验证游戏文件、更新系统组件等简易步骤,即刻重返畅玩之旅。以下是直击问题要害的详细解决方案。1.重新安装游戏首先,确保游戏文件没有损坏或不完整,尝试卸载后重新安装......
  • FileCodeBox --一个文件快递柜
    介绍什么是FileCodeBox?以下内容摘至Github:匿名口令分享文本,文件,像拿快递一样取文件它的特点有什么?以下内容摘至Github:轻量简洁:Fastapi+Sqlite3+Vue2+ElementUI轻松上传:复制粘贴,拖拽选择多种类型:文本,文件防止爆破:错误次数限制防止滥用:IP限制上传次数口令分享:......
  • 项目文件预览
            在实际项目开发过程,项目使用数据存在多种形式,“文件”也是一种常见形式,因此,“文件预览”功能变成了常规需求。        kkFileView项目使用流行的springboot搭建,易上手和部署。万能的文件预览开源项目,基本支持主流文档格式预览,如:1、kkFileView下载......
  • gcc编译时报错 fatal error: stdio.h: 没有那个文件或目录
    在kylinV10中使用GCC编译代码时遇到如下问题:首先确认了,自己单词没有拼写错。然后再检查GCC的版本,确实没问题。没有标准的头文件需要安装build-essential来解决。需要安装build-essential。执行以下命令:sudoapt-getinstallbuild-essential如无兼容版本可使用可使用ap......
  • Steam游戏启动受阻:有效应对bcrypt.dll文件缺失的解决方案
    面对Steam游戏启动时“bcrypt.dll文件缺失”的提示,玩家无需沮丧。通过几个简单步骤,包括验证游戏文件、安装必要运行库、系统文件检查等,即可轻松跨越这道障碍,重返游戏战场。本文速递解决方案,助你无缝继续游戏之旅。1.重新安装游戏首先,尝试从Steam库中卸载游戏,然后重新安装。......
  • 在Linux中,如何进行备份或归档文件(tar 命令)?
    在Linux中,tar命令是用来打包和压缩文件的常用工具。它可以将多个文件和目录合并成一个单一的归档文件,并且可以选择性地对其进行压缩。以下是使用tar命令进行备份或归档文件的一些基本用法:1.创建归档文件基本命令格式:tar[选项][归档后的文件名][要归档的文件或目录]......
  • 在Linux中,如何将二进制文件添加到 $PATH 变量中?
    在Linux系统中,$PATH是一个环境变量,它定义了操作系统在执行命令时搜索可执行文件的目录。要将一个二进制文件添加到$PATH中,你可以按照以下步骤操作:找到二进制文件的路径:首先,你需要知道二进制文件的确切位置。使用which命令或者find命令来查找文件的位置。例如:whichyou......
  • 【解决了一个小问题】因为镜像证书的问题,golang http client出现错误 `tls: failed to
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯一个服务使用Docker打包镜像,部署到k8s后出现如下的错误信息:tls:failedtoverifycertificate:x509:certificatesignedbyunknownauthority出错的位置是......
  • springboot打包将配置文件和jar分开
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0......
  • 一个excel文件分成多个文件
    SubMacro4()''Macro4Macro''Dima,b,c,d,e,f,g,a1,a2AsIntegerDimcnameAsStringDimwbAsWorkbooka=2c=1b=1d=2f=0a1=2Forb=1To50a=a+1IfCells(a,"c")<>Cells(a+1,"......