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_FILEERROR_FILE 指定的 <檔案> 為同一個檔案,則該檔案會同時用於標準輸出和標準錯誤管線。

OUTPUT_QUIETERROR_QUIET

OUTPUT_VARIABLE 的標準輸出或 ERROR_VARIABLE 的標準錯誤不會連線(沒有變數內容)。 *_FILEECHO_*_VARIABLE 選項不受影響。

OUTPUT_VARIABLEERROR_VARIABLE

指定的變數會被設定為分別包含標準輸出和標準錯誤管線的內容。如果兩個管線指定相同的變數,它們的輸出會依照產生的順序合併。

ECHO_OUTPUT_VARIABLEECHO_ERROR_VARIABLE

在版本 3.18 新增。

標準輸出或標準錯誤不會專門重新導向到指定的變數。

輸出會複製到指定的變數,同時也會輸出到標準輸出或標準錯誤,類似於 Unix 的 tee 命令。

注意

如果同一個管線指定了多個 OUTPUT_*ERROR_* 選項,則優先順序未指定。如果沒有指定 OUTPUT_*ERROR_* 選項,則輸出會與 CMake 程序本身的相應管線共用。

COMMAND_ECHO <位置>

在版本 3.15 新增。

正在執行的命令會回顯到 <位置>,其中 <位置> 會被設定為 STDERRSTDOUTNONE 其中之一。當此選項不存在時,請參閱 CMAKE_EXECUTE_PROCESS_COMMAND_ECHO 變數,以瞭解如何控制預設行為。

ENCODING <名稱>

在版本 3.8 新增。

在 Windows 上,用於解碼程序輸出的編碼。在其他平台上會忽略。有效的編碼名稱為:

NONE

不執行解碼。這假設程序輸出以與 CMake 內部編碼 (UTF-8) 相同的方式編碼。

這是 CMake 3.14 和更早版本中的預設值。

AUTO

使用目前活動主控台的程式碼頁,如果該程式碼頁不可用,則使用 ANSI。

這是 CMake 3.15 到 3.30 中的預設值。

ANSI

使用 ANSI 程式碼頁。

OEM

使用原始設備製造商 (OEM) 程式碼頁。

UTF-8

在版本 3.11 新增。

使用 UTF-8 程式碼頁。

這是預設值。請參閱政策 CMP0176

UTF8

使用 UTF-8 程式碼頁。建議不要使用此名稱,而改用 UTF-8,以符合 UTF-8 RFC 的命名慣例。

COMMAND_ERROR_IS_FATAL <ANY|LAST>

在版本 3.19 新增。

COMMAND_ERROR_IS_FATAL 後面的選項會決定遇到錯誤時的行為

ANY 如果命令列表中的任何命令失敗,execute_process() 命令會停止並顯示錯誤。

LAST 如果命令列表中的最後一個命令失敗,execute_process() 命令會停止並顯示錯誤。列表中較早的命令不會導致嚴重錯誤。