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。如果建置成功,此命令會執行可執行檔並將結束代碼儲存在 <runResultVar> 中。如果可執行檔已建置,但執行失敗,則 <runResultVar> 將被設定為 FAILED_TO_RUN。請參閱命令 try_compile() 以取得兩個命令共用的選項文件,以及如何建構測試專案以建置原始碼檔案的資訊。

必須提供一個或多個原始碼檔案。此外,SOURCES 和/或 SOURCE_FROM_* 其中之一必須先於其他關鍵字。

在 3.26 版本中新增:如果未指定 NO_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_VARIABLERUN_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_VARIABLEOUTPUT_VARIABLE 選項時才會建立。

為了讓您的專案更容易進行交叉編譯,僅在真正需要時才使用 try_run。如果您使用 try_run,僅在真正需要時才使用 RUN_OUTPUT_STDOUT_VARIABLERUN_OUTPUT_STDERR_VARIABLERUN_OUTPUT_VARIABLEOUTPUT_VARIABLE 選項。使用這些選項時,當進行交叉編譯時,必須將快取變數手動設定為可執行檔的輸出。您也可以使用檢查 CMAKE_CROSSCOMPILING 變數的 if() 區塊「保護」對 try_run 的呼叫,並為這種情況提供易於預設的替代方案。