execute_process¶
執行一個或多個子程序。
execute_process(COMMAND <cmd1> [<arguments>]
[COMMAND <cmd2> [<arguments>]]...
[WORKING_DIRECTORY <directory>]
[TIMEOUT <seconds>]
[RESULT_VARIABLE <variable>]
[RESULTS_VARIABLE <variable>]
[OUTPUT_VARIABLE <variable>]
[ERROR_VARIABLE <variable>]
[INPUT_FILE <file>]
[OUTPUT_FILE <file>]
[ERROR_FILE <file>]
[OUTPUT_QUIET]
[ERROR_QUIET]
[COMMAND_ECHO <where>]
[OUTPUT_STRIP_TRAILING_WHITESPACE]
[ERROR_STRIP_TRAILING_WHITESPACE]
[ENCODING <name>]
[ECHO_OUTPUT_VARIABLE]
[ECHO_ERROR_VARIABLE]
[COMMAND_ERROR_IS_FATAL <ANY|LAST>])
執行給定的一個或多個命令序列。
命令會以管線方式並行執行,每個程序的標準輸出會導向到下一個程序的標準輸入。所有程序會共用一個標準錯誤管線。
execute_process
在 CMake 組態專案時,也就是在產生建置系統之前執行命令。使用 add_custom_target()
和 add_custom_command()
命令來建立在建置時執行的自訂命令。
選項
COMMAND
子程序的命令列。
CMake 直接使用作業系統 API 執行子程序。
在 POSIX 平台上,命令列會以
argv[]
樣式的陣列傳遞給子程序。在 Windows 平台上,命令列會編碼為一個字串,以便使用
CommandLineToArgvW
的子程序能夠解碼原始引數。
不會使用中間 shell,因此像
>
之類的 shell 運算子會被視為一般的引數。(使用INPUT_*
、OUTPUT_*
和ERROR_*
選項來重新導向 stdin、stdout 和 stderr。)若要循序執行多個命令,請使用多個
execute_process
呼叫,每個呼叫都帶有一個COMMAND
引數。WORKING_DIRECTORY
指定的目錄會設定為子程序的目前工作目錄。
TIMEOUT
在指定的秒數(允許小數)之後,所有未完成的子程序都會被終止,並且
RESULT_VARIABLE
會被設定為一個提及「timeout」的字串。RESULT_VARIABLE
此變數會被設定為包含最後一個子程序的結果。這會是最後一個子程序的整數傳回碼,或是一個描述錯誤狀況的字串。
RESULTS_VARIABLE <變數>
在版本 3.10 新增。
此變數會被設定為包含所有程序的結果,以 分號分隔的列表 形式,順序與給定的
COMMAND
引數相同。每個項目會是相應子程序的整數傳回碼,或是一個描述錯誤狀況的字串。INPUT_FILE <檔案>
<檔案>
會附加到第一個COMMAND
程序的標準輸入管線。OUTPUT_FILE <檔案>
<檔案>
會附加到最後一個COMMAND
程序的標準輸出管線。ERROR_FILE <檔案>
<檔案>
會附加到所有COMMAND
程序的標準錯誤管線。
在版本 3.3 新增:如果 OUTPUT_FILE
和 ERROR_FILE
指定的 <檔案>
為同一個檔案,則該檔案會同時用於標準輸出和標準錯誤管線。
OUTPUT_QUIET
、ERROR_QUIET
OUTPUT_VARIABLE
的標準輸出或ERROR_VARIABLE
的標準錯誤不會連線(沒有變數內容)。*_FILE
和ECHO_*_VARIABLE
選項不受影響。OUTPUT_VARIABLE
、ERROR_VARIABLE
指定的變數會被設定為分別包含標準輸出和標準錯誤管線的內容。如果兩個管線指定相同的變數,它們的輸出會依照產生的順序合併。
ECHO_OUTPUT_VARIABLE
、ECHO_ERROR_VARIABLE
在版本 3.18 新增。
標準輸出或標準錯誤不會專門重新導向到指定的變數。
輸出會複製到指定的變數,同時也會輸出到標準輸出或標準錯誤,類似於 Unix 的
tee
命令。
注意
如果同一個管線指定了多個 OUTPUT_*
或 ERROR_*
選項,則優先順序未指定。如果沒有指定 OUTPUT_*
或 ERROR_*
選項,則輸出會與 CMake 程序本身的相應管線共用。
COMMAND_ECHO <位置>
在版本 3.15 新增。
正在執行的命令會回顯到
<位置>
,其中<位置>
會被設定為STDERR
、STDOUT
或NONE
其中之一。當此選項不存在時,請參閱CMAKE_EXECUTE_PROCESS_COMMAND_ECHO
變數,以瞭解如何控制預設行為。ENCODING <名稱>
在版本 3.8 新增。
在 Windows 上,用於解碼程序輸出的編碼。在其他平台上會忽略。有效的編碼名稱為:
COMMAND_ERROR_IS_FATAL <ANY|LAST>
在版本 3.19 新增。
在
COMMAND_ERROR_IS_FATAL
後面的選項會決定遇到錯誤時的行為ANY
如果命令列表中的任何命令失敗,execute_process()
命令會停止並顯示錯誤。LAST
如果命令列表中的最後一個命令失敗,execute_process()
命令會停止並顯示錯誤。列表中較早的命令不會導致嚴重錯誤。