1681710206374.png
1681710240060.png
2. 文件STRINGS命令
file STRINGS 命令将文件内容读入一串ASCII 字符串并存入变量中。二进制文件将被忽略。读取文件时Enter 和r 将被忽略:
文件(字符串[.])
3. 文件
4. 文件时间戳
2、写文件操作
1.文件写命令
2.文件APPEND命令
3.文件TOUCH命令
4. 文件生成命令
3. 文件系统
1.文件GLOB命令
file GLOB命令主要用于匹配规则,匹配指定目录下所需的文件。命令行格式为:
文件(GLOB[LIST_DIRECTORIES true[false]] [RELATIVE] [CONFIGURE_DEPENDS] [.])
LIST_DIRECTORIES true[false]: 如果为false,则将省略目录。默认情况下,返回目录。
RELATIVE: 相对路径返回的结果不会是绝对路径,而是会去掉绝对路径的一部分,返回相对路径。
CONFIGURE_DEPENDS: 如果设置了此标志位,则主构建系统将检查目标添加逻辑,并且必须在构建期间重新运行标记的GLOB 命令。
:匹配表达式,该表达式与正则匹配类似,如下:
*.cxx - 匹配所有扩展名为cxx 的文件
*.vt? - 匹配所有扩展名为vta,vtz 的文件
f[3-5].txt - 匹配文件f3.txt、f4.txt、f5.txt
1681710380049.pngu013250861
发表于2022-11-20 10:55:06
2364
收藏4
分类专栏:#C++/CMAKE 文章标签:c++ CMAKE
版权
C++/CMAKE
该栏目包含此内容
35 篇文章0 订阅
订阅专栏
在使用cmake文件操作时,不可避免的要对相关文件进行操作,比如读取文件内容、创建新文件等,这些都需要通过file命令来执行。
1、读文件操作
1.文件读取命令
从文件读取常用的操作是file(READ),它将filename文件的内容原封不动地读入变量变量中。整个命令行格式为:
文件(读取[偏移] [限制] [十六进制])
filename:是必选选项,是要读取的文件。它可以有绝对路径。
需要variable:它将文件内容读取到variable变量中。
OFFSET:可选,从文件中的偏移位置开始读取文件内容
HEX:可选,可以将读取的文件内容转换为十六进制。
LIMIT: 可选读取内容到变量的最大长度
我们举个例子来说明,实验目录下有两个文件。使用tree命令查看:
$ 树。
CMakeLists.txt
测试.cpp
0个目录,2个文件
$
test.cpp文件内容如下:
include
include
int main(){
printf("你好世界!n");
}
CMakeList.txt文件内容如下:
cmake_minimum_required(版本3.13.4)
项目(cmake_read)
消息("--------Proj Src Dir:"{PROJECT_SOURCE_DIR}/test.cpp TEST_RESULT)
消息("--------测试结果:"${TEST_RESULT})
使用file(read)命令将文件test.cpp的内容读取到TEST_RESULT变量中,打印出来,然后使用cmake运行:
cd 构建/
[huozhikun@login09 build]$ /public/home/huozhikun/cmake/cmake-3.17.0/bin/cmake .
-- C 编译器标识为GNU 7.3.1
-- CXX编译器标识为GNU 7.3.1
-- 检查C 编译器是否正常工作: /opt/rh/devtoolset-7/root/usr/bin/cc
-- 检查C 编译器是否正常工作: /opt/rh/devtoolset-7/root/usr/bin/cc - 有效
-- 检测C编译器ABI信息
-- 检测C 编译器ABI 信息- 完成
-- 检测C编译特性
-- 检测C 编译功能- 完成
-- 检查CXX 编译器是否正常工作: /opt/rh/devtoolset-7/root/usr/bin/c++
-- 检查工作CXX 编译器: /opt/rh/devtoolset-7/root/usr/bin/c++ - 工作
-- 检测CXX编译器ABI信息
-- 检测CXX 编译器ABI 信息- 完成
-- 检测CXX编译特性
-- 检测CXX 编译功能- 完成
--------Proj Src Dir: /public/home/huozhikun/test/cmake/read/example
--------测试结果: #include
include
int main(){
printf("你好世界!n")
}
--配置完成
-- 生成完成
-- 构建文件已写入: /public/home/huozhikun/test/cmake/read/example/build
将test.cpp 的文件内容完整读取到TEST_RESULT 变量中。
2. 文件STRINGS命令
file STRINGS 命令将文件内容读入一串ASCII 字符串并存入变量中。二进制文件将被忽略。读取文件时Enter 和r 将被忽略:
文件(字符串[.])
3. 文件
4. 文件时间戳
2、写文件操作
1.文件写命令
2.文件APPEND命令
3.文件TOUCH命令
4. 文件生成命令
3. 文件系统
1.文件GLOB命令
file GLOB命令主要用于匹配规则,匹配指定目录下所需的文件。命令行格式为:
文件(GLOB[LIST_DIRECTORIES true[false]] [RELATIVE] [CONFIGURE_DEPENDS] [.])
LIST_DIRECTORIES true[false]: 如果为false,则将省略目录。默认情况下,返回目录。
RELATIVE: 相对路径返回的结果不会是绝对路径,而是会去掉绝对路径的一部分,返回相对路径。
CONFIGURE_DEPENDS: 如果设置了此标志位,则主构建系统将检查目标添加逻辑,并且必须在构建期间重新运行标记的GLOB 命令。
:匹配表达式,该表达式与正则匹配类似,如下:
*.cxx - 匹配所有扩展名为cxx 的文件
*.vt? - 匹配所有扩展名为vta,vtz 的文件
f[3-5].txt - 匹配文件f3.txt、f4.txt、f5.txt
用例
cmake_minimum_required(版本3.13.4)
项目(cmake_文件系统)
消息("--------Proj Src Dir: " ${CMAKE_CURRENT_SOURCE_DIR})
文件(GLOB TEST_RESULT LIST_DIRECT true RELATIVE /public/home *.cpp)
消息("--------TEST_RESULT: ${TEST_RESULT}")
在当前路径下搜索cpp文件,返回结果为/public/home的相对路径。结果是:
$ /public/home/huozhikun/cmake/cmake-3.17.0/bin/cmake .
……
--------项目源目录Dir: /public/home/huozhikun/test/cmake/filesystem/example_3
--------TEST_RESULT: huozhikun/test/cmake/filesystem/example_3/test_2.cpp
……
2.文件GLOB_RECURSE命令
3.文件重命名命令
4.RENAME_RECURES
5. 文件MAKE_DIRECTORY命令
6. 文件复制命令
file COPY命令用于将文件复制到目标目录。命令行格式如下:
文件(复制.目标
[文件权限.]
[目录权限.]
[NO_SOURCE_PERMISSIONS] [USE_SOURCE_PERMISSIONS]
[文件匹配]
[[图案|正则表达式]
[排除] [权限.]]
[.]):要复制的源文件
DESTINATION:将源文件复制到目标目录
FILE_PERMISSIONS:修改源文件权限
DIRECTORY_PERMISSIONS:目录权限
NO_SOURCE_PERMISSIONS:不使用源文件权限,重新指定文件权限
USE_SOURCE_PERMISSIONS:使用源文件的权限。设置此选项后,将无法再使用FILE_PERMISSIONS 权限。支持的权限设置有:
OWNER_READ
OWNER_WRITE
OWNER_EXECUTE
组读
组_写
组_执行
世界_阅读
世界_写
世界执行
PATTERN 和REGEX:制定一些匹配规则
EXCLUDE: 不包含或排除某些特殊文件
7. 文件安装命令
4. 路径转换
1. 文件RELATIVE_PATH
2. 文件TO_CMAKE_PATH
【深入解析C++编程语言:核心技术与应用案例】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
C++真滴强悍啊,做系统开发用的很方便。
有8位网友表示赞同!
C++语法确实有点复杂,需要好好学一学才能掌握。
有17位网友表示赞同!
想学软件工程,C++感觉是必修课。
有19位网友表示赞同!
听说游戏引擎很多是用C++写的?
有14位网友表示赞同!
大学时学C++,感觉当时就太难了,现在回头一看还是蛮好用的。
有18位网友表示赞同!
有没有什么好的C++学习资源推荐呀?
有7位网友表示赞同!
最近想尝试用C++开发下个人项目,不知道怎么样入门比较合适。
有20位网友表示赞同!
C++性能确实棒,对硬件充分利用嘛!
有6位网友表示赞同!
C++内存管理需要特别关注,很容易出错。
有8位网友表示赞同!
虽然学起来比较难,但一旦掌握了C++的精髓,开发效率真的高啊!
有9位网友表示赞同!
C++是面向对象的语言吗?
有10位网友表示赞同!
感觉C++应用场景很多,从游戏到金融都有它的身影。
有11位网友表示赞同!
C++是不是老旧一点的语言啊?现在还有人用吗?
有18位网友表示赞同!
C++编译器那么多,你们用哪个比较顺手?
有6位网友表示赞同!
想学编程,C++太难了吧...
有15位网友表示赞同!
我对人工智能特别感兴趣,听说一些AI框架是用C++写的啊。
有17位网友表示赞同!
用C++可以开发手机APP吗?
有20位网友表示赞同!
学习C++需要数学基础吗?
有9位网友表示赞同!
C++文档看不懂怎么办?
有9位网友表示赞同!
感觉程序员掌握C++能力真的很令人佩服!
有7位网友表示赞同!