久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

博客專欄

EEPW首頁 > 博客 > cmake file 命令

cmake file 命令

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

file:文件操作命令.


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


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



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


APPEND 如同WRITE,區別在于它將信息內容追加到文件末尾。


 


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


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



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


MD5, SHA1, SHA224, SHA256, SHA384, 和SHA512 會計算出文件內容對應的加密散列。



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


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



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


GLOB 會產生一個由所有匹配globbing表達式的文件組成的列表,并將其保存到變量中。Globbing 表達式與正則表達式類似,但更簡單。如果指定了RELATIVE 標記,返回的結果將是與指定的路徑相對的路徑構成的列表。 (通常不推薦使用GLOB命令來從源碼樹中收集源文件列表。原因是:如果CMakeLists.txt文件沒有改變,即便在該源碼樹中添加或刪除文件,產生的構建系統也不會知道何時該要求CMake重新產生構建文件。globbing 表達式包括:


   *.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類似,區別在于它會遍歷匹配目錄的所有文件以及子目錄下面的文件。對于屬于符號鏈接的子目錄,只有FOLLOW_SYMLINKS指定一或者cmake策略CMP0009沒有設置為NEW時,才會遍歷這些目錄。


Examples of recursive globbing include:


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


 


file(RENAME <oldname> <newname>)


RENAME 將文件系統中的文件或目錄移動到目標位置,并自動替換目標位置處的文件或目錄。


 


file(REMOVE [file1 ...])


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


file(REMOVE_RECURSE [file1 ...])


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


 


file(MAKE_DIRECTORY [directory1 directory2 ...])


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



file(RELATIVE_PATH variable directory file)


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



file(TO_CMAKE_PATH path result)


TO_CMAKE_PATH會將路徑轉換成cmake風格的路徑表達形式。



file(TO_NATIVE_PATH path result)


TO_NATIVE_PATH與TO_CMAKE_PATH類似,但執行反向操作,將cmake風格的路徑轉換為操作系統特定風格的路徑表式形式。



file(DOWNLOAD url file [INACTIVITY_TIMEOUT timeout]

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

     [EXPECTED_MD5 sum])


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


file(UPLOADfilename url [INACTIVITY_TIMEOUT timeout]

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


UPLOAD與DOWNLOAD類似,它執行的是一個上傳操作。參數含義與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表示復制文件,目錄以及符號鏈接到一個目標文件夾中。輸入路徑將視為相對于當前源碼目錄的路徑。目標路徑則是相對于當前的構建目錄。復制保留輸入文件的一些權限屬性,


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


INSTALL 與COPY略微有點不同:它打印狀態信息,并且默認情況下指定了 NO_SOURCE_PERMISSIONS。



測試例子:


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)

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

版權聲明:本文為CSDN博主「山莊來客」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

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


*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



關鍵詞: cmake

技術專區

關閉