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

2023-05-16

使用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)

六、锁

CMake file文件操作命令_Huo的藏经阁的博客-CSDN博客_cmake file

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • STM32进阶之串口环形缓冲区实现 FIFO

    队列的概念 在此之前 xff0c 我们来回顾一下队列的基本概念 xff1a 队列 Queue xff1a 是一种先进先出 First In First Out 简称 FIFO 的线性表 xff0c 只允许在一端插入 xff08 入队 xff
  • DLT645-2007电能表通讯协议

    DLT645 2007通讯协议 xff1a 1 发送的帧格式 xff1a 1 1 帧起始符 0x68H 这个不多说 xff0c 记住就好 xff1b 1 2 地址域A0 A5 地址域由 6 个字节构成 xff0c 每字节 2 位 BCD 码
  • nvcc 编译 spdlog出现的问题

    1 链接 libspdlog a 时提示需要加 fpic选项 在编译spdlog库时加上cmake选项 xff1a DCMAKE CXX FLAGS 61 34 fpic 34 参考 2 core h出现error 将core h中的如下代
  • protobuf安装

    clone 代码 git clone https github com protocolbuffers protobuf git安装依赖项 sudo apt get install autoconf sudo apt get install
  • git lfs 的使用

    安装 curl s https packagecloud io install repositories github git lfs script deb sh sudo bashsudo apt get install git lfsg
  • 李诗雨的2016

    不诗意的女程序猿不是好厨师 xff0c 大家好 xff0c 我是李诗雨 xff5e 首先 xff0c 要先向各位道个歉 xff0c 其实我也是在csdn上刚拿到 暂住证 的新人 所以有好多功能还不知道 xff0c 今天在手机app上才看到有
  • 使用barrier共享键鼠

    1 安装flatpak 1 1 ubuntu 18及以后 sudo apt install flatpak 1 2 ubuntu18 以前 sudo add apt repository ppa flatpak stablesudo apt
  • OpenCV中访问图像中像素的三种方法

    1 用指针访问像素元 用指针访问像素的这种方法利用的是C语言中的操作符 xff0c 这种方法最快 如 xff1a cv Mat image span class hljs number 100 span span class hljs nu
  • 目标跟踪方法总结

    1 数据集 1 1 OTB 最经典的benchmark xff0c 有2013的OTB50和2015的OTB100OTB包括25 的灰度序列 xff0c 分辨率相对较低http cvlab hanyang ac kr tracker ben
  • SiamFC:基于全卷积孪生网络的目标跟踪算法

    Abstract 本论文提出一种新的全卷积孪生网络作为基本的跟踪算法 xff0c 这个网络在ILSVRC15的目标跟踪视频数据集上进行端到端的训练 我们的跟踪器在帧率上超过了实时性要求 xff0c 尽管它非常简单 xff0c 但在多个ben
  • fusion的理解

    fusion 有很多种模式 xff0c 开始没明白 现在知道fusion 后然后采样 取平均 xff0c 然后恍然大悟
  • rk3288 buildroot 系统编译移植libcurl

    支持https configure prefix 61 pwd buildout host 61 arm buildroot linux CC 61 home gttest work RKLINUX rk3288 v linux build
  • ROS2中IMU话题的发布及可视化

    环境 xff1a Ubuntu 20 04 xff0c ROS2 Foxy 传感器 xff1a 维特智能BWT901CL 代码是从维特智能的示例代码修改的 xff0c 实现基本的加速度 角速度和角度读取 xff0c 发布IMU消息 这个传感
  • vue-admin/vue-element-admin 自动生成表单,数据提交,组件传值

    父组件 xff08 基于element UI xff09 xff1a 弹出层 lt dialogBar dialogData 61 34 dialogData 34 v if 61 34 showUpdateDiaLog 34 64 han
  • 美团2018春招笔试题

    任意一个正整数可以用字符 0 9 表示出来 但是当这些字符每种字符数量有限时 xff0c 可能有些正整数表示不出来 比如有两个 1 xff0c 一个 2 xff0c 能表示出11 12 112等等 xff0c 但是无法表示出10 122 2
  • 如何使用火狐浏览器的Poster插件进行post请求

    不诗意的女程序猿不是好厨师 转载请注明出处 xff1a From 李诗雨 http blog csdn net cjm2484836553 article details 72453907 善假于物者 xff0c 正途也 学会利用身边的工具
  • Grpc常见面试题

    1 grpc四种通信模式 xff1f 答 xff1a 1 xff09 一元 RPC xff1a 客户端发起一个请求 xff0c 服务端给出一个响应 xff0c 然后请求结束 xff1b 2 xff09 服务端流 RPC xff1a 客户端发
  • 读书笔记:无人机控制(五)

    目录 垂直起降飞行器的数学建模与非线性控制RUAV动力学模型刚体动力学 Rigid Body Dynamics 空气动力学力与力矩 Aerodynamics Forces and Torques 非线性分层飞行控制器的设计与稳定性飞行控制器
  • jetson-xavier-nx刷机趟坑记录

    1 sdkmanager刷写系统 sdkmanager启动失败 使用sdkmanager刷机时可能会遇到sdkmanager启动失败的情况 xff0c 界面出现一个 OPT 错误 xff0c 显示 No SDKs are available
  • 虚拟串口软件和串口调试助手的简单使用

    为解决计算机的物理串口个数的限制 xff0c 在进行串口调试实验时 xff0c 应尽可能采用虚拟串口软件 VSPD xff08 Virtual Serial Ports Driver xff09 虚拟串口软件是由Eltima软件公司设计的虚

随机推荐