C++-Cmake指令:file【文件操作命令】【比如:file GLOB命令主要用于匹配规则在指定的目录内匹配到所需要的文件】

使用cmake 文件操作时不可避免需要操作相关文件,比如读取文件内容,创建新文件的等等操作,都需要通过file命令进行操作。

一、读文件操作

1、file READ命令

1681710160003.png

常用的从文件中读取操作为****file(READ <filename> <variable>)****,将filename文件中内容原封不动读取到variable变量中,命令行全部格式为:
filename: 必选项 为要读取的文件,可以带绝对路径
variable: 必选项,将文件内容读取到varible变量中。
OFFSET <offset>:可选项,从文件中偏移位置offset 开始读取文件内容
HEX:可选项,可以将读取文件内容转换成十六进制

1681710206374.png

1681710240060.png

2、file STRINGS命令
file STRINGS命令是将文件的内容读取成一串ASCII字符串到变量中,其中二进制文件将会被忽略,在读取文件中 回车及\r将会被忽略:
file(STRINGS <filename> <variable> [<options> ...])
3、file <HASH>
4、file TIMESTAMP
二、写文件操作
1、file WRITE命令

2、file APPEND命令

3、file TOUCH命令

4、file GENERATE命令

三、Filesystem
1、file GLOB命令
file GLOB命令主要用于匹配规则在指定的目录内匹配到所需要的文件,命令行格式:
file(GLOB <variable> [LIST_DIRECTORIES true[false]] [RELATIVE <path> ] [CONFIGURE_DEPENDS] [<globbing-expression> ...])
LIST_DIRECTORIES true[false]: 如果为false,目录将会被省略,默认情况下返回是带目录
RELATIVE <path>: 相对路径<path> 返回的结果将不是绝对路径,而是将绝对路径中的<path>部分去掉,返回相对路径
CONFIGURE_DEPENDS:如果该标记位设置,在主构建系统检查目标添加逻辑,必便在构建时重新运行标记的GLOB命令
<globbing-expression>:匹配表达式,表达式类似与正则匹配,如下:
*.cxx - match all files with extension cxx
*.vt? - match all files with extension vta,...,vtz
f[3-5].txt - match files f3.txt, f4.txt, f5.txt


1681710380049.png

u013250861

于 2022-11-20 10:55:06 发布

2364
收藏 4
分类专栏: # C++/CMAKE 文章标签: c++ CMAKE
版权

C++/CMAKE
专栏收录该内容
35 篇文章0 订阅
订阅专栏
使用cmake 文件操作时不可避免需要操作相关文件,比如读取文件内容,创建新文件的等等操作,都需要通过file命令进行操作。

一、读文件操作
1、file READ命令
常用的从文件中读取操作为file(READ <filename> <variable>),将filename文件中内容原封不动读取到variable变量中,命令行全部格式为:

file(read <filename> <variable> [OFFSET <offset>] [LIMIT <max-in>] [HEX])
filename: 必选项 为要读取的文件,可以带绝对路径
variable: 必选项,将文件内容读取到varible变量中。
OFFSET <offset>:可选项,从文件中偏移位置offset 开始读取文件内容
HEX:可选项,可以将读取文件内容转换成十六进制。
LIMIT <max-in>: 可选项 最多读取<max-in>长度的内容到变量中

以一个例子说明,实验目录下有两个文件,使用tree命令查看:

$ tree
.
├── CMakeLists.txt
└── test.cpp

0 directories, 2 files
$
test.cpp文件内容如下:

include <stdio.h>

include <stdlib.h>

int main(){
printf("hello world!\n");
}
CMakeList.txt文件内容如下:

cmake_minimum_required(VERSION 3.13.4)

project(cmake_read)

message("--------Proj Src Dir: " {PROJECT_SOURCE_DIR}) file(READ{PROJECT_SOURCE_DIR}/test.cpp TEST_RESULT)
message("--------TEST RESULT: " ${TEST_RESULT})
使用file(read)命令将文件test.cpp的内容读取到TEST_RESULT变量中,并打印出来,使用cmake运行:

/public/home/huozhikun/cmake/cmake-3.17.0/bin/cmake .. CMake Error: The source directory "/public/home/huozhikun/test/cmake/read" does not appear to contain CMakeLists.txt. Specify --help for usage, or press the help button on the CMake GUI. [huozhikun@login09 example] cd build/
[huozhikun@login09 build]$ /public/home/huozhikun/cmake/cmake-3.17.0/bin/cmake ..
-- The C compiler identification is GNU 7.3.1
-- The CXX compiler identification is GNU 7.3.1
-- Check for working C compiler: /opt/rh/devtoolset-7/root/usr/bin/cc
-- Check for working C compiler: /opt/rh/devtoolset-7/root/usr/bin/cc - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /opt/rh/devtoolset-7/root/usr/bin/c++
-- Check for working CXX compiler: /opt/rh/devtoolset-7/root/usr/bin/c++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
--------Proj Src Dir: /public/home/huozhikun/test/cmake/read/example
--------TEST RESULT: #include <stdio.h>

include <stdlib.h>

int main(){
printf("hello world!\n")
}

-- Configuring done
-- Generating done
-- Build files have been written to: /public/home/huozhikun/test/cmake/read/example/build

将test.cpp的文件内容原封不动读取到TEST_RESULT变量中。

2、file STRINGS命令
file STRINGS命令是将文件的内容读取成一串ASCII字符串到变量中,其中二进制文件将会被忽略,在读取文件中 回车及\r将会被忽略:

file(STRINGS <filename> <variable> [<options> ...])
3、file <HASH>
4、file TIMESTAMP
二、写文件操作
1、file WRITE命令

2、file APPEND命令

3、file TOUCH命令

4、file GENERATE命令

三、Filesystem
1、file GLOB命令
file GLOB命令主要用于匹配规则在指定的目录内匹配到所需要的文件,命令行格式:

file(GLOB <variable> [LIST_DIRECTORIES true[false]] [RELATIVE <path> ] [CONFIGURE_DEPENDS] [<globbing-expression> ...])
LIST_DIRECTORIES true[false]: 如果为false,目录将会被省略,默认情况下返回是带目录
RELATIVE <path>: 相对路径<path> 返回的结果将不是绝对路径,而是将绝对路径中的<path>部分去掉,返回相对路径
CONFIGURE_DEPENDS:如果该标记位设置,在主构建系统检查目标添加逻辑,必便在构建时重新运行标记的GLOB命令
<globbing-expression>:匹配表达式,表达式类似与正则匹配,如下:
*.cxx - match all files with extension cxx
*.vt? - match all files with extension vta,...,vtz
f[3-5].txt - match files f3.txt, f4.txt, f5.txt
用例

cmake_minimum_required(VERSION 3.13.4)

project(cmake_filesystem)

message("--------Proj Src Dir: " ${CMAKE_CURRENT_SOURCE_DIR})

file(GLOB TEST_RESULT LIST_DIRECT true RELATIVE /public/home *.cpp)
message("--------TEST_RESULT: ${TEST_RESULT}")
寻找当前路径下的cpp文件,且返回的结果中为/public/home的相对路径,结果:

$ /public/home/huozhikun/cmake/cmake-3.17.0/bin/cmake ..
... ...
--------Proj Src Dir: /public/home/huozhikun/test/cmake/filesystem/example_3
--------TEST_RESULT: huozhikun/test/cmake/filesystem/example_3/test_2.cpp
... ...
2、 file GLOB_RECURSE命令
3、file RENAME命令
4、RENAME_RECURES
5、file MAKE_DIRECTORY命令
6、file COPY命令
file COPY命令用于将文件copy到目标目录中,命令行格式如下:
file(COPY <files> ... DESTINATION <dir>

     [FILE_PERMISSIONS <permissions> ...] 

     [DIRECTORY_PERMISSIONS <permissions> ... ]

     [NO_SOURCE_PERMISSIONS] [USE_SOURCE_PERMISSIONS]

     [FILES_MATCHING]

     [ [PATTERN <pattern> | REGEX <regex>]

       [EXCLUDE] [PERMISSIONS <permissions> ... ] ]

     [...])

<files>:要拷贝的源文件
DESTINATION <dir>:要将源文件拷贝到目的目录<dir>中
FILE_PERMISSIONS <permissions>:修改源文件权限
DIRECTORY_PERMISSIONS <permissions>:目录权限
NO_SOURCE_PERMISSIONS:不使用源文件权限,对文件权限重新指定
USE_SOURCE_PERMISSIONS:使用源文件权限,当该选项设置时,不能再使用FILE_PERMISSIONS权限,支持的权限设置有:
OWNER_READ

OWNER_WRITE

OWNER_EXECUTE

GROUP_READ

GROUP_WRITE

GROUP_EXECUTE

WORLD_READ

WORLD_WRITE

WORLD_EXECUTE

PATTERN 和REGEX:制定一些匹配规则
EXCLUDE: 不包括或排除调一些特殊文件
7、file INSTALL命令
四、路径转换(path conversion)
1、file RELATIVE_PATH

2、file TO_CMAKE_PATH

3、 file TO_NATIVE_PATH

五、传送相关命令(transfer)
六、锁
————————————————
版权声明:本文为CSDN博主「u013250861」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013250861/article/details/127936519

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容