簡體   English   中英

CMake的add_custom_command誤解

[英]Cmake add_custom_command misunderstanding

我正在學習CMake,並努力學習: add_custom_command函數。 如果這是一個基本問題,很抱歉,但是在線文檔對我沒有太大幫助。

對於此片段:

add_executable (creator creator.cpp)
get_target_property (creator EXE_LOC LOCATION) # get creator.cpp location

add_custom_command(
    OUTPUT ./created.cpp  # creates 'created.cpp' at the specified path
    DEPENDS creator       # specifies files on which the command depends
    COMMAND ${EXE_LOC}    # executes this command 
    ARGS ./created.cpp
)

add_executable(FOO ./created.c)

我可以直觀地意識到發生了什么,但是,我不明白為什么需要add_custom_command主體中的每條指令。 這是我的理解方式(請在錯誤之處糾正我):

  • 可執行創建器是使用creator.cpp在當前工作目錄中創建的
  • EXE_LOC變量用於存儲創建的可執行文件的路徑
  • add_custom_command

    • OUTPUT指定將在當前工作目錄中created.cpp文件。
    • DEPENDS :指定此新創建的.cpp文件取決於先前創建的可執行文件。 但是為什么我們需要指定呢? 這樣做是強制性的嗎?如果沒有指定,會發生什么情況
    • COMMAND: ${EXE_LOC} :我不明白。 我假設當腳本到達這一點時,將執行某種命令。 但是這里到底要執行什么呢? ./creator也許? 該文檔指定:

      如果COMMAND指定了一個可執行文件目標(由ADD_EXECUTABLE創建),它將被在構建時創建的可執行文件的位置自動替換。

但是我真的不太明白。

  • ARGS :我不知道這應該做什么以及我們為什么需要它。 確實讓我感到困惑的是,我們將新創建的文件作為參數傳遞給了一個命令,該命令的目的是創建該特定文件。 請盡可能為我清除此內容。

感謝您閱讀我的長帖子。

COMMAND選項視為命令行很方便

首先,您需要鍵入要執行的程序的路徑。 在給定的情況下,它是creator可執行文件的路徑。 然后,您鍵入給定命令的參數。 在給定的情況下,唯一的參數是created.cpp文件的路徑。 這將執行:

<path-to-creator-executable> <path-to-cpp-file>

選項

DEPENDS creator

在給定的情況下,在CMake文檔中對add_custom_command進行了完美描述:

如果DEPENDS指定任何目標(由add_custom_target()add_executable()add_library()命令創建add_custom_target()add_executable()創建目標級別的依賴項,以確保在使用此自定義命令創建任何目標之前先構建目標。 此外,如果目標是可執行文件或庫,則將創建文件級依賴關系,以使自定義命令在重新編譯目標時重新運行。

簡而言之,這意味着在creator可執行文件將按照COMMAND選項中的指定運行之前,將在需要時創建並更新可執行文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM