C++-Cmake指令:file【文件操作命令】【比如:file GLOB命令主要用于匹配規(guī)則在指定的目錄內(nèi)匹配到所需要的文件】

使用cmake 文件操作時(shí)不可避免需要操作相關(guān)文件,比如讀取文件內(nèi)容,創(chuàng)建新文件的等等操作,都需要通過(guò)file命令進(jìn)行操作。

一、讀文件操作

1、file READ命令

1681710160003.png

常用的從文件中讀取操作為****file(READ <filename> <variable>)****,將filename文件中內(nèi)容原封不動(dòng)讀取到variable變量中,命令行全部格式為:
filename: 必選項(xiàng) 為要讀取的文件,可以帶絕對(duì)路徑
variable: 必選項(xiàng),將文件內(nèi)容讀取到varible變量中。
OFFSET <offset>:可選項(xiàng),從文件中偏移位置offset 開(kāi)始讀取文件內(nèi)容
HEX:可選項(xiàng),可以將讀取文件內(nèi)容轉(zhuǎn)換成十六進(jìn)制

1681710206374.png

1681710240060.png

2、file STRINGS命令
file STRINGS命令是將文件的內(nèi)容讀取成一串ASCII字符串到變量中,其中二進(jìn)制文件將會(huì)被忽略,在讀取文件中 回車及\r將會(huì)被忽略:
file(STRINGS <filename> <variable> [<options> ...])
3、file <HASH>
4、file TIMESTAMP
二、寫(xiě)文件操作
1、file WRITE命令

2、file APPEND命令

3、file TOUCH命令

4、file GENERATE命令

三、Filesystem
1、file GLOB命令
file GLOB命令主要用于匹配規(guī)則在指定的目錄內(nèi)匹配到所需要的文件,命令行格式:
file(GLOB <variable> [LIST_DIRECTORIES true[false]] [RELATIVE <path> ] [CONFIGURE_DEPENDS] [<globbing-expression> ...])
LIST_DIRECTORIES true[false]: 如果為false,目錄將會(huì)被省略,默認(rèn)情況下返回是帶目錄
RELATIVE <path>: 相對(duì)路徑<path> 返回的結(jié)果將不是絕對(duì)路徑,而是將絕對(duì)路徑中的<path>部分去掉,返回相對(duì)路徑
CONFIGURE_DEPENDS:如果該標(biāo)記位設(shè)置,在主構(gòu)建系統(tǒng)檢查目標(biāo)添加邏輯,必便在構(gòu)建時(shí)重新運(yùn)行標(biāo)記的GLOB命令
<globbing-expression>:匹配表達(dá)式,表達(dá)式類似與正則匹配,如下:
*.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 發(fā)布

2364
收藏 4
分類專欄: # C++/CMAKE 文章標(biāo)簽: c++ CMAKE
版權(quán)

C++/CMAKE
專欄收錄該內(nèi)容
35 篇文章0 訂閱
訂閱專欄
使用cmake 文件操作時(shí)不可避免需要操作相關(guān)文件,比如讀取文件內(nèi)容,創(chuàng)建新文件的等等操作,都需要通過(guò)file命令進(jìn)行操作。

一、讀文件操作
1、file READ命令
常用的從文件中讀取操作為file(READ <filename> <variable>),將filename文件中內(nèi)容原封不動(dòng)讀取到variable變量中,命令行全部格式為:

file(read <filename> <variable> [OFFSET <offset>] [LIMIT <max-in>] [HEX])
filename: 必選項(xiàng) 為要讀取的文件,可以帶絕對(duì)路徑
variable: 必選項(xiàng),將文件內(nèi)容讀取到varible變量中。
OFFSET <offset>:可選項(xiàng),從文件中偏移位置offset 開(kāi)始讀取文件內(nèi)容
HEX:可選項(xiàng),可以將讀取文件內(nèi)容轉(zhuǎn)換成十六進(jìn)制。
LIMIT <max-in>: 可選項(xiàng) 最多讀取<max-in>長(zhǎng)度的內(nèi)容到變量中

以一個(gè)例子說(shuō)明,實(shí)驗(yàn)?zāi)夸浵掠袃蓚€(gè)文件,使用tree命令查看:

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

0 directories, 2 files
$
test.cpp文件內(nèi)容如下:

include <stdio.h>

include <stdlib.h>

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

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的內(nèi)容讀取到TEST_RESULT變量中,并打印出來(lái),使用cmake運(yùn)行:

/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的文件內(nèi)容原封不動(dòng)讀取到TEST_RESULT變量中。

2、file STRINGS命令
file STRINGS命令是將文件的內(nèi)容讀取成一串ASCII字符串到變量中,其中二進(jìn)制文件將會(huì)被忽略,在讀取文件中 回車及\r將會(huì)被忽略:

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

2、file APPEND命令

3、file TOUCH命令

4、file GENERATE命令

三、Filesystem
1、file GLOB命令
file GLOB命令主要用于匹配規(guī)則在指定的目錄內(nèi)匹配到所需要的文件,命令行格式:

file(GLOB <variable> [LIST_DIRECTORIES true[false]] [RELATIVE <path> ] [CONFIGURE_DEPENDS] [<globbing-expression> ...])
LIST_DIRECTORIES true[false]: 如果為false,目錄將會(huì)被省略,默認(rèn)情況下返回是帶目錄
RELATIVE <path>: 相對(duì)路徑<path> 返回的結(jié)果將不是絕對(duì)路徑,而是將絕對(duì)路徑中的<path>部分去掉,返回相對(duì)路徑
CONFIGURE_DEPENDS:如果該標(biāo)記位設(shè)置,在主構(gòu)建系統(tǒng)檢查目標(biāo)添加邏輯,必便在構(gòu)建時(shí)重新運(yùn)行標(biāo)記的GLOB命令
<globbing-expression>:匹配表達(dá)式,表達(dá)式類似與正則匹配,如下:
*.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}")
尋找當(dāng)前路徑下的cpp文件,且返回的結(jié)果中為/public/home的相對(duì)路徑,結(jié)果:

$ /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到目標(biāo)目錄中,命令行格式如下:
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>:修改源文件權(quán)限
DIRECTORY_PERMISSIONS <permissions>:目錄權(quán)限
NO_SOURCE_PERMISSIONS:不使用源文件權(quán)限,對(duì)文件權(quán)限重新指定
USE_SOURCE_PERMISSIONS:使用源文件權(quán)限,當(dāng)該選項(xiàng)設(shè)置時(shí),不能再使用FILE_PERMISSIONS權(quán)限,支持的權(quán)限設(shè)置有:
OWNER_READ

OWNER_WRITE

OWNER_EXECUTE

GROUP_READ

GROUP_WRITE

GROUP_EXECUTE

WORLD_READ

WORLD_WRITE

WORLD_EXECUTE

PATTERN 和REGEX:制定一些匹配規(guī)則
EXCLUDE: 不包括或排除調(diào)一些特殊文件
7、file INSTALL命令
四、路徑轉(zhuǎn)換(path conversion)
1、file RELATIVE_PATH

2、file TO_CMAKE_PATH

3、 file TO_NATIVE_PATH

五、傳送相關(guān)命令(transfer)
六、鎖
————————————————
版權(quán)聲明:本文為CSDN博主「u013250861」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u013250861/article/details/127936519

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容