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