cmake进阶:文件操作之写文件

一. 简介

cmake 提供了 file() 命令可对文件进行一系列操作,譬如读写文件、删除文件、文件重命名、拷贝文件、创建目录等等。 接下来 学习这个功能强大的 file() 命令。
本文学习 CMakeLists.txt语法中写文件操作。

二. cmake进阶:文件操作之写文件

1. 写文件:写、追加内容

使用 file() 命令写文件,使用方式如下所示:

复制代码
file(WRITE <filename> <content>...)
file(APPEND <filename> <content>...)

将 <content> 写入名为 <filename> 的文件中。如果文件不存在,它将被创建;
如果文件已经存在, WRITE 模式将覆盖它, APPEND 模式将内容追加到文件末尾。
准备一个工程,在工程根目录下的 CMakeLists.txt文件中加入如下代码:

复制代码
# file()写文件测试
file(WRITE wtest.txt "Hello World!") #给定内容生成 wtest.txt 文件
file(APPEND wtest.txt " China") #给定内容追加到 wtest.txt 文件末尾

注意文件可以使用绝对路径或相对路径指定,相对路径被解释为相对于当前源码路径。

进入工程 build目录下,执行 "cmake .."命令后,会在当前源码目录下生成一个名为 wtest.txt 的件,如下所示:

接着查看 wtest.txt 文件中内容,如下所示:

2. 写文件:由内容生成文件

由内容生成文件的命令为:

复制代码
file(GENERATE OUTPUT output-file
    <INPUT input-file|CONTENT content>
    [CONDITION expression])

output-file :指定输出文件名,可以带路径(绝对路径或相对路径);
INPUT input-file :指定输入文件,通过输入文件的内容来生成输出文件;
CONTENT content :指定内容,直接指定内容来生成输出文件;
CONDITION expression :如果表达式 expression 条件判断为真,则生成文件、否则不生成文件。

同样,指定文件既可以使用相对路径、也可使用绝对路径,不过在这里,相对路径被解释为相对于当前源码的 BINARY_DIR 路径,而不是当前源码路径。

在工程根目录下的 CMakeLists.txt文件中加入如下代码:

复制代码
# 由前面生成的 wtest.txt 中的内容去生成 out1.txt 文件
file(GENERATE OUTPUT out1.txt INPUT "${PROJECT_SOURCE_DIR}/wtest.txt")

# 由指定的内容生成 out2.txt
file(GENERATE OUTPUT out2.txt CONTENT "This is the out2.txt file")

# 由指定的内容生成 out3.txt,加上条件控制,用户可根据实际情况
# 用表达式判断是否需要生成文件,这里只是演示,直接是 1
file(GENERATE OUTPUT out3.txt CONTENT "This is the out3.txt file" CONDITION 1)

注意:这里 Linux系统上的 cmake安装的哪个版本,则在 CMakeLists.txt中关于最低版本需要设置为 所安装的 cmake版本号。否则,会在下一步 "cmake .." 命令后报错。
进入到 build 目录下执行 " cmake .." 命令 :

执行完 cmake 之后会在 build 目录(也就是顶层源码的 BINARY_DIR )下生成了 out1.txt 、 out2.txt 和 out3.txt 三个文件,内容如下:

关于 cmake写文件学习到这里。

相关推荐
地衣君5 小时前
RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程
linux·ubuntu·risc-v
5:005 小时前
云备份项目
linux·开发语言·c++
码农101号6 小时前
Linux中shell编程表达式和数组讲解
linux·运维·服务器
云道轩6 小时前
升级centos 7.9内核到 5.4.x
linux·运维·centos
是小满满满满吗6 小时前
传输层:udp与tcp协议
linux·服务器·网络
爱学习的小道长6 小时前
Ubuntu Cursor升级成v1.0
linux·运维·ubuntu
EelBarb6 小时前
seafile:ubuntu搭建社区版seafile12.0
linux·运维·ubuntu
Xam_d_LM6 小时前
【Latex】Windows/Ubuntu 绘制 eps 矢量图通用方法(drawio),支持插入 Latex 数学公式
linux·ubuntu·科研·矢量图·drawio
Mintimate7 小时前
云服务器 Linux 手动 DD 安装第三方 Linux 发行版:原理与实战
linux·运维·服务器
RussellFans7 小时前
Linux 环境配置
linux·运维·服务器