[英]Shell commands using Cmake add_custom_command on Linux
[英]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
主體中的每條指令。 這是我的理解方式(請在錯誤之處糾正我):
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.