一. 简介
cmake 提供了 file() 命令可对文件进行一系列操作,譬如读写文件、删除文件、文件重命名、拷贝文件、创建目录等等。 接下来 学习这个功能强大的 file() 命令。
前一篇文章学习了 CMakeLists.txt语法中写文件操作。文章如下:
cmake进阶:文件操作之写文件-CSDN博客
本文学习 CMakeLists.txt语法中读文件操作。
二. cmake进阶:文件操作之读文件
1. 读文件的基本用法
file() 读文件命令格式如下:
file(READ <filename> <variable>[OFFSET <offset>] [LIMIT <max-in>] [HEX])
从名为 <filename> 的文件中读取内容,并将其存储在 <variable> 中。
可选择从给定的 <offset> 开始,最多读取 <max-in> 字节。 HEX 选项使数据转换为十六进制表示(对二进制数据有用)。
同样,指定文件既可以使用相对路径、也可使用绝对路径,相对路径被解释为相对于当前源码路 径。
准备一个工程,向顶层 CMakeLists.txt文件中添加 如下代码:
# file()读文件测试
file(READ "${PROJECT_SOURCE_DIR}/wtest.txt" out_var) #读取前面生成的 wtest.txt
message(${out_var}) # 打印输出# 读取 wtest.txt 文件:限定起始字节和大小
file(READ "${PROJECT_SOURCE_DIR}/wtest.txt" out_var OFFSET 0 LIMIT 10)
message(${out_var})# 读取 wtest.txt 文件:以二进制形式读取,限定起始字节和大小,
file(READ "${PROJECT_SOURCE_DIR}/wtest.txt" out_var OFFSET 0 LIMIT 5 HEX)
message(${out_var})
进入 build目录下,执行 "cmake .." 命令打印如下信息:
2. 以字符串形式读取
命令格式如下所示:
file(STRINGS <filename> <variable> [<options>...])
从 <filename> 文件中解析 ASCII 字符串列表,并将其存储在 <variable> 中。这个命令专用于读取字符串,会将文件中的二进制数据将被忽略,回车符 (\r, CR) 字符被忽略。
filename :指定需要读取的文件,可使用绝对路径、也可使用相对路径,相对路径被解释为相对于当前 源码路径。
variable :存放字符串的变量。
options :可选的参数,可选择 0 个、 1 个或多个选项。
这些选项包括:
➢ LENGTH_MAXIMUM <max-len> : 读取的字符串的最大长度;
➢ LENGTH_MINIMUM <min-len> : 读取的字符串的最小长度;
➢ LIMIT_COUNT <max-num> : 读取的行数;
➢ LIMIT_INPUT <max-in> : 读取的字节数;
➢ LIMIT_OUTPUT <max-out> : 存储到变量的限制字节数;
➢ NEWLINE_CONSUME : 把换行符也考虑进去;
➢ NO_HEX_CONVERSION : 除非提供此选项,否则 Intel Hex 和 Motorola S-record 文件在读取时会自动转换为二进制文件。
➢ REGEX <regex> : 只读取符合正则表达式的行;
➢ ENCODING <encoding-type> : 指定输入文件的编码格式,目前支持的编码有: UTF-8 、 UTF-16LE 、UTF-16BE 、 UTF-32LE 、 UTF-32BE 。如果未提供 ENCODING 选项并且文件具有字节顺序标记, 则 ENCODING 选项将默认为尊重字节顺序标记。
假如存在一个工程,该工程根目录下存在 input.txt文件。input文件存在如下内容:
This is the first line
This is the second line
This is the third line
This is the fourth line
This is the fifth line
向顶层 CMakeLists.txt文件中添加如下代码:
# 从 input.txt 文件读取字符串
file(STRINGS "${PROJECT_SOURCE_DIR}/input.txt" out_var)
message("${out_var}")# 限定读取字符串的最大长度
file(STRINGS "${PROJECT_SOURCE_DIR}/input.txt" out_var LENGTH_MAXIMUM 5)
message("${out_var}")# 限定读取字符串的最小长度
file(STRINGS "${PROJECT_SOURCE_DIR}/input.txt" out_var LENGTH_MINIMUM 4)
message("${out_var}")# 限定读取行数
file(STRINGS "${PROJECT_SOURCE_DIR}/input.txt" out_var LIMIT_COUNT 3)
message("${out_var}")
进入 build目录下,运行 "cmake .." 命令后打印如下:
关于CMakeLists.txt语法中文件读取暂时学到这里。