cmake进阶:文件操作

一. 简介

前面几篇文章学习了 cmake的文件操作,写文件,读文件。文章如下:

cmake进阶:文件操作之写文件-CSDN博客

cmake进阶:文件操作之读文件-CSDN博客

本文继续学习文件操作。主要学习 文件重命名,删除文件,以及获取文件的 Hash值。

二. cmake进阶:文件操作

1. 文件重命名

使用 file() 命令可以对文件进行重命名操作,命令格式如下:

复制代码
file(RENAME <oldname> <newname>)

oldname 指的是原文件, newname 指的是重命名后的新文件。
文件既可以使用绝对路径指定,也可以使用相对路径指定,相对路径被解释为相对于当前源码路径。
前提是在 工程根目录下存在 input.txt文件。
准备一个工程,在顶层 CMakeLists.txt文件中添加如下代码:

复制代码
# 文件重命名
file(RENAME "${PROJECT_SOURCE_DIR}/input.txt" "${PROJECT_SOURCE_DIR}/output.txt")

进入 build目录下, 运行 **"cmake .."**命令后,打印信息如下:

可以看到,文件名已经更改。

2. 删除文件

使用 file()命令可以删除文件,命令格式如下:

复制代码
file(REMOVE [<files>...])
file(REMOVE_RECURSE [<files>...])

REMOVE 选项将删除给定的文件,但不可以删除目录;
REMOVE_RECURSE 选项将删除给定的文件或目录、以及非空目录。
指定文件或目录既可以使用绝对路径、也可以使用相对路径,相对路径被解释为 相对于当前源码路径。

向顶层 CMakeLists.txt文件中添加如下代码:

复制代码
# file 删除文件或目录测试
file(REMOVE "${PROJECT_SOURCE_DIR}/out1.txt")
file(REMOVE_RECURSE "${PROJECT_SOURCE_DIR}/out2.txt" "${PROJECT_SOURCE_DIR}/empty-dir"
"${PROJECT_SOURCE_DIR}/Non_empty-dir")

out1.txt 和 out2.txt 是普通文件, empty-dir 是一个空目录,而 Non_empty-dir 是一个非空目录,如下所示:

进入到 build 目录下,执行 "cmake .." 命令:

执行完 cmake 命令之后,这些文件以及文件夹都被删除了。

3. 计算文件的 hash 值

file()命令可以计算指定文件内容的加密散列(hash 值)并将其存储在变量中。命令格式如下所示:

复制代码
file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> <filename> <variable>)

MD5|SHA1|SHA224|SHA256|SHA384|SHA512 表示不同的计算 hash 的算法,必须要指定其中之一。
filename 指定文件(可使用绝对路径、也可使用相对路径,相对路径被解释为相对于当前源码的 BINARY_DIR ),将计算结果存储在 variable 变量中。

向顶层 CMakeLists.txt文件中添加如下代码:

复制代码
# 计算文件的 hash 值
file(SHA256 "${PROJECT_SOURCE_DIR}/input.txt" out_var)
message("${out_var}")

这里我们还是用上面创建的 input.txt 文件,使用 SHA256 算法进行计算,结果如下:

关于 file() 命令就给大家介绍这么多了,其实 file() 命令的功能很强大,除了以上给大家介绍的基本功能外,还支持文件下载、文件锁等功能,大家有兴趣可以自己去了解。

相关推荐
刃神太酷啦2 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
赵文宇(温玉)2 小时前
OpenEuler24.03 SP4 系统安装(欧拉/麒麟V10)
linux·openeuler·欧拉
Brilliantwxx4 小时前
【Linux】 进程(7)深度剖析 进程内核O(1)调度队列 + 饥饿问题
linux·运维·服务器
郝学胜-神的一滴4 小时前
Effective Python 条款4:字符串格式化大乱斗
开发语言·网络·python·程序人生·软件工程
刚入门的大一新生5 小时前
Linux-命令行参数和环境变量
linux·运维·服务器
我星期八休息5 小时前
Linux I/O多路转接—epoll
java·linux·运维·服务器·开发语言·jvm·算法
HugoStudio_SWAN6 小时前
C++ CMD 互动动画:按键触发爆炸效果
开发语言·c++·学习·程序人生
wuminyu6 小时前
Java FFM处理网络读写事件源码剖析
java·linux·c语言·jvm·c++
实心儿儿6 小时前
Linux —— 数据链路层
linux·网络·智能路由器
心情无变化7 小时前
deepseek harness安装教程
程序人生·ai