博客專欄

EEPW首頁 > 博客 > cmake file 命令

cmake file 命令

發(fā)布人:電子禪石 時間:2022-10-21 來源:工程師 發(fā)布文章

file:文件操作命令.


file(WRITE filename "message towrite"... )


WRITE 將一則信息寫入文件’filename’中,如果該文件存在,它會覆蓋它,如果不存在,它會創(chuàng)建該文件。



file(APPEND filename "message to write"... )


APPEND 如同WRITE,區(qū)別在于它將信息內(nèi)容追加到文件末尾。


 


file(READ filename variable [LIMIT numBytes] [OFFSEToffset] [HEX])


READ 會讀取文件的內(nèi)容并將其存入到變量中。它會在給定的偏移量處開始讀取最多numBytes個字節(jié)。如果指定了HEX參數(shù),二進(jìn)制數(shù)據(jù)將會被轉(zhuǎn)換成十進(jìn)制表示形式并存儲到變量中。



file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> filenamevariable)


MD5, SHA1, SHA224, SHA256, SHA384, 和SHA512 會計算出文件內(nèi)容對應(yīng)的加密散列。



file(STRINGS filename variable [LIMIT_COUNT num]

     [LIMIT_INPUT numBytes] [LIMIT_OUTPUTnumBytes]

     [LENGTH_MINIMUM numBytes] [LENGTH_MAXIMUMnumBytes]

     [NEWLINE_CONSUME] [REGEX regex]

     [NO_HEX_CONVERSION])


STRINGS 從文件中解析出ASCII字符串列表并存儲在變量中。文件中的二進(jìn)制數(shù)據(jù)將被忽略?;剀嚪?CR)也會被忽略。也能解析Intel Hex和Motorola S-record文件,這兩種文件在讀取是會自動轉(zhuǎn)換為二進(jìn)制格式,可以使用參數(shù)NO_HEX_CONVERSION 禁用這種自動轉(zhuǎn)換。LIMIT_COUNT設(shè)置可返回的最大數(shù)量的字符串。LIMIT_INPUT 設(shè)置從輸入文件中可讀取的最大字節(jié)數(shù)。LIMIT_OUTPUT設(shè)置了存儲在輸出變量中最大的字節(jié)數(shù)。 LENGTH_MINIMUM設(shè)置了返回的字符串的最小長度。小于這個長度的字符串將被忽略。 LENGTH_MAXIMUM 設(shè)置返回的字符串的最大長度。大于這個長度的字符串將被切分為長度不大于于最大長度值的子字符串。NEWLINE_CONSUME 允許換行符包含進(jìn)字符串中而不是截斷它們。REGEX 指定了返回的字符串必須匹配的正則表達(dá)式的模式。典型用法


file(STRINGS myfile.txt myfile), 將輸入文件的每行內(nèi)容存儲在變量"myfile"中。



file(GLOB variable [RELATIVE path] [globbingexpressions]...)


GLOB 會產(chǎn)生一個由所有匹配globbing表達(dá)式的文件組成的列表,并將其保存到變量中。Globbing 表達(dá)式與正則表達(dá)式類似,但更簡單。如果指定了RELATIVE 標(biāo)記,返回的結(jié)果將是與指定的路徑相對的路徑構(gòu)成的列表。 (通常不推薦使用GLOB命令來從源碼樹中收集源文件列表。原因是:如果CMakeLists.txt文件沒有改變,即便在該源碼樹中添加或刪除文件,產(chǎn)生的構(gòu)建系統(tǒng)也不會知道何時該要求CMake重新產(chǎn)生構(gòu)建文件。globbing 表達(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



file(GLOB_RECURSE variable [RELATIVE path]

     [FOLLOW_SYMLINKS] [globbingexpressions]...)


GLOB_RECURSE 與GLOB類似,區(qū)別在于它會遍歷匹配目錄的所有文件以及子目錄下面的文件。對于屬于符號鏈接的子目錄,只有FOLLOW_SYMLINKS指定一或者cmake策略CMP0009沒有設(shè)置為NEW時,才會遍歷這些目錄。


Examples of recursive globbing include:


   /dir/*.py - match all python files in /dir and subdirectories


 


file(RENAME <oldname> <newname>)


RENAME 將文件系統(tǒng)中的文件或目錄移動到目標(biāo)位置,并自動替換目標(biāo)位置處的文件或目錄。


 


file(REMOVE [file1 ...])


REMOVE 會刪除指定的文件以及子目錄下的文件。


file(REMOVE_RECURSE [file1 ...])


REMOVE_RECURSE 會刪除指定的文件及子目錄,包括非空目錄。


 


file(MAKE_DIRECTORY [directory1 directory2 ...])


MAKE_DIRECTORY在指定目錄處創(chuàng)建子目錄,如果它們的父目錄不存在,也會創(chuàng)建它們的父目錄。



file(RELATIVE_PATH variable directory file)


RELATIVE_PAT推斷出指定文件相對于特定目錄的路徑。



file(TO_CMAKE_PATH path result)


TO_CMAKE_PATH會將路徑轉(zhuǎn)換成cmake風(fēng)格的路徑表達(dá)形式。



file(TO_NATIVE_PATH path result)


TO_NATIVE_PATH與TO_CMAKE_PATH類似,但執(zhí)行反向操作,將cmake風(fēng)格的路徑轉(zhuǎn)換為操作系統(tǒng)特定風(fēng)格的路徑表式形式。



file(DOWNLOAD url file [INACTIVITY_TIMEOUT timeout]

     [TIMEOUT timeout] [STATUS status] [LOGlog] [SHOW_PROGRESS]

     [EXPECTED_MD5 sum])


DOWNLOAD下載指定URL的資源到指定的文件上。如果指定了LOG 參數(shù),將會把下載的日志保存到相應(yīng)的變量中。如果指定了STATUS變量,操作的狀態(tài)信息就會保存在相應(yīng)的變量中。返回的狀態(tài)是一個長度為2的列表。第一個元素是操作的返回值。0表示操作過程中無錯誤發(fā)生。如果指定了TIMEOUT,單位于秒,且必須為整數(shù),那么在指定的時間后,操作將會超時,INACTIVITY_TIMEOUT指定了操作在處于活動狀態(tài)超過指定的秒數(shù)后,應(yīng)該停止。如果指定了EXPECTED_MD5,如果操作會檢驗下載后的文件的實際md5校驗和是否與預(yù)期的匹配,如果不匹配,操作將會失敗,并返回相應(yīng)的錯誤碼。如果指定了 SHOW_PROGRESS,那么進(jìn)度的信息將會被打印成狀態(tài)信息直到操作完成。


file(UPLOADfilename url [INACTIVITY_TIMEOUT timeout]

     [TIMEOUT timeout] [STATUS status][LOG log] [SHOW_PROGRESS])


UPLOAD與DOWNLOAD類似,它執(zhí)行的是一個上傳操作。參數(shù)含義與DOWNLOAD 一致。


 


file(<COPY|INSTALL> files... DESTINATION<dir>

     [FILE_PERMISSIONS permissions...]

     [DIRECTORY_PERMISSIONSpermissions...]

     [NO_SOURCE_PERMISSIONS][USE_SOURCE_PERMISSIONS]

     [FILES_MATCHING]

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

     [EXCLUDE] [PERMISSIONSpermissions...]] [...])


COPY表示復(fù)制文件,目錄以及符號鏈接到一個目標(biāo)文件夾中。輸入路徑將視為相對于當(dāng)前源碼目錄的路徑。目標(biāo)路徑則是相對于當(dāng)前的構(gòu)建目錄。復(fù)制保留輸入文件的一些權(quán)限屬性,


除非顯式指定了NO_SOURCE_PERMISSIONS(默認(rèn)是USE_SOURCE_PERMISSIONS),關(guān)于文件權(quán)限,PATTERN,REGX和EXCLUDE等相關(guān)選項可參考install(DIRECTORY)命令的文檔。 


INSTALL 與COPY略微有點(diǎn)不同:它打印狀態(tài)信息,并且默認(rèn)情況下指定了 NO_SOURCE_PERMISSIONS。



測試?yán)樱?/p>


message(STATUS "current dir: ${CMAKE_CURRENT_SOURCE_DIR}")

file(WRITE test1.txt "Some messages to Write\n" )

file(APPEND test1.txt "Another message to write\n")

file(READ test1.txt CONTENTS LIMIT 4 OFFSET 12)

message(STATUS "contents of test1.txt is: \n ${CONTENTS}")

file(MD5 ${CMAKE_CURRENT_SOURCE_DIR}/test1.txt HASH_CONTENTS)

message(STATUS "hash contents of test1.txt is: \n ${HASH_CONTENTS}")

file(STRINGS test1.txt PARSED_STRINGS)

message(STATUS "\n strings of test1.txt is: \n ${PARSED_STRINGS}")

file(GLOB files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.*")

message(STATUS  "files: ${files}")

file(MAKE_DIRECTORY dir1 dir2)

file(RENAME dir2 dir3)

file(REMOVE dir3)

file(REMOVE_RECURSE dir3)

file(RELATIVE_PATH relative_path ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/test1.txt)

message(STATUS "relative path : ${relative_path}")

file(TO_CMAKE_PATH "$ENV{PATH}" cmake_path)

message(STATUS "cmake path: ${cmake_path}")

file(TO_NATIVE_PATH "/usr/local/sbin;/usr/local/bin" native_path)

message(STATUS "native path: ${native_path}")

file(DOWNLOAD "http://www.baidu.com" ${CMAKE_CURRENT_SOURCE_DIR}/index.html SHOW_PROGRESS)

file(COPY test1.txt DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/dir1)

file(INSTALL test1.txt DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/dir1)

————————————————

版權(quán)聲明:本文為CSDN博主「山莊來客」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/fuyajun01/article/details/8880121


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: cmake

技術(shù)專區(qū)

關(guān)閉