try_run¶
嘗試編譯然後執行一些程式碼。
嘗試編譯並執行原始碼檔案¶
try_run(<runResultVar> <compileResultVar>
[SOURCES_TYPE <type>]
<SOURCES <srcfile...> |
SOURCE_FROM_CONTENT <name> <content> |
SOURCE_FROM_VAR <name> <var> |
SOURCE_FROM_FILE <name> <path> >...
[LOG_DESCRIPTION <text>]
[NO_CACHE]
[NO_LOG]
[CMAKE_FLAGS <flags>...]
[COMPILE_DEFINITIONS <defs>...]
[LINK_OPTIONS <options>...]
[LINK_LIBRARIES <libs>...]
[COMPILE_OUTPUT_VARIABLE <var>]
[COPY_FILE <fileName> [COPY_FILE_ERROR <var>]]
[<LANG>_STANDARD <std>]
[<LANG>_STANDARD_REQUIRED <bool>]
[<LANG>_EXTENSIONS <bool>]
[RUN_OUTPUT_VARIABLE <var>]
[RUN_OUTPUT_STDOUT_VARIABLE <var>]
[RUN_OUTPUT_STDERR_VARIABLE <var>]
[WORKING_DIRECTORY <var>]
[ARGS <args>...]
)
版本 3.25 新增。
嘗試從一個或多個原始碼檔案建置可執行檔。建置成功會在 <compileResultVar>
中回傳布林值 true
,而建置失敗則回傳布林值 false
(除非指定 NO_CACHE
,否則會快取)。如果建置成功,這會執行可執行檔並將結束代碼儲存在 <runResultVar>
中 (除非指定 NO_CACHE
,否則會快取)。如果可執行檔已建置,但執行失敗,則 <runResultVar>
將會設定為 FAILED_TO_RUN
。請參閱命令 try_compile()
文件,以瞭解這兩個命令共用的選項,以及關於如何建構測試專案以建置原始碼檔案的資訊。
必須提供一個或多個原始碼檔案。此外,SOURCES
和/或 SOURCE_FROM_*
之一必須先於其他關鍵字。
版本 3.26 新增:如果未指定 NO_LOG
選項,此命令會記錄一個 configure-log try_run 事件。
此命令支援 CMake 3.25 之前的替代簽章。建議使用上面的簽章以獲得清晰度。
try_run(<runResultVar> <compileResultVar>
<bindir> <srcfile|SOURCES srcfile...>
[CMAKE_FLAGS <flags>...]
[COMPILE_DEFINITIONS <defs>...]
[LINK_OPTIONS <options>...]
[LINK_LIBRARIES <libs>...]
[LINKER_LANGUAGE <lang>]
[COMPILE_OUTPUT_VARIABLE <var>]
[COPY_FILE <fileName> [COPY_FILE_ERROR <var>]]
[<LANG>_STANDARD <std>]
[<LANG>_STANDARD_REQUIRED <bool>]
[<LANG>_EXTENSIONS <bool>]
[RUN_OUTPUT_VARIABLE <var>]
[OUTPUT_VARIABLE <var>]
[WORKING_DIRECTORY <var>]
[ARGS <args>...]
)
選項¶
特定於 try_run
的選項為
COMPILE_OUTPUT_VARIABLE <var>
在給定的變數中報告編譯步驟的建置輸出。
OUTPUT_VARIABLE <var>
在給定的變數中報告編譯建置輸出和執行可執行檔的輸出。此選項因舊版原因而存在,且僅受舊的
try_run
簽章支援。建議改用COMPILE_OUTPUT_VARIABLE
和RUN_OUTPUT_VARIABLE
。RUN_OUTPUT_VARIABLE <var>
在給定的變數中報告執行可執行檔的輸出。
RUN_OUTPUT_STDOUT_VARIABLE <var>
版本 3.25 新增。
在給定的變數中報告執行可執行檔的 stdout 輸出。
RUN_OUTPUT_STDERR_VARIABLE <var>
版本 3.25 新增。
在給定的變數中報告執行可執行檔的 stderr 輸出。
WORKING_DIRECTORY <var>
版本 3.20 新增。
在給定的目錄中執行可執行檔。如果未指定
WORKING_DIRECTORY
,則可執行檔將在<bindir>
或目前的建置目錄中執行。ARGS <args>...
執行可執行檔時要傳遞的其他引數。
其他行為設定¶
設定變數 CMAKE_TRY_COMPILE_CONFIGURATION
以選擇建置組態
對於多組態產生器,這會選擇要建置的組態。
對於單組態產生器,這會在測試專案中設定
CMAKE_BUILD_TYPE
。
交叉編譯時的行為¶
版本 3.3 新增:在執行交叉編譯的二進位檔時使用 CMAKE_CROSSCOMPILING_EMULATOR
。
當交叉編譯時,在第一步編譯的可執行檔通常無法在建置主機上執行。try_run
命令會檢查 CMAKE_CROSSCOMPILING
變數,以偵測 CMake 是否處於交叉編譯模式。如果是這種情況,它仍會嘗試編譯可執行檔,但除非設定了 CMAKE_CROSSCOMPILING_EMULATOR
變數,否則不會嘗試執行可執行檔。相反地,它會建立快取變數,這些變數必須由使用者填寫,或在某些 CMake 腳本檔案中預先設定為可執行檔在其目標平台上執行時會產生的值。這些快取條目是
<runResultVar>
如果可執行檔要在目標平台上執行的話,則為結束代碼。
<runResultVar>__TRYRUN_OUTPUT
如果可執行檔要在目標平台上執行的話,則為來自 stdout 和 stderr 的輸出。只有在使用
RUN_OUTPUT_VARIABLE
或OUTPUT_VARIABLE
選項時才會建立此項。
為了讓您的專案更容易進行交叉編譯,請僅在真正需要時才使用 try_run
。如果您使用 try_run
,請僅在真正需要時才使用 RUN_OUTPUT_STDOUT_VARIABLE
、RUN_OUTPUT_STDERR_VARIABLE
、RUN_OUTPUT_VARIABLE
或 OUTPUT_VARIABLE
選項。使用它們將需要在交叉編譯時,手動將快取變數設定為可執行檔的輸出。您也可以使用 if()
區塊檢查 CMAKE_CROSSCOMPILING
變數來「保護」對 try_run
的呼叫,並為這種情況提供一個易於預設的替代方案。