add_custom_target 參數解析
add_custom_target 是 CMake 中的一個命令,用來創建自定義的構建目標,這個目標不是直接構建檔案(如源代碼編譯生成執行檔),而是用來執行其他操作(例如執行腳本、設置環境變數、運行測試、執行外部命令等)。
add_custom_target 的基本語法如下:
參數解釋:
<target-name>:- 這是你要創建的目標名稱。你可以用它來引用這個目標,比如後續的 
make run或cmake --build會執行此目標。 
- 這是你要創建的目標名稱。你可以用它來引用這個目標,比如後續的 
 [<source>...](可選):- 這部分允許你指定與目標相關的源文件(雖然在 
add_custom_target中通常不需要,因為這通常是一些外部操作)。 
- 這部分允許你指定與目標相關的源文件(雖然在 
 [COMMAND <command> <args>...]:- 用來指定執行的命令。這部分可以指定你要運行的外部命令(例如執行某個可執行文件、執行某個腳本等)。
 - 這部分是 
add_custom_target中最重要的參數之一。 
[WORKING_DIRECTORY <dir>](可選):- 指定目標執行命令時的工作目錄。如果未指定,則使用 CMake 預設的工作目錄。
 
[DEPENDS <depend-target>...](可選):- 用來指定此目標的依賴。也就是說,在執行此目標之前,會先構建其他指定的目標。如果你的目標依賴於其他文件(例如構建後需要先運行的生成操作),你可以在這裡指定。
 
[COMMENT <comment>](可選):- 為這個目標添加一條說明性文字,這樣在執行 
make或 CMake 構建時會顯示該文字來說明正在執行的操作。 
- 為這個目標添加一條說明性文字,這樣在執行 
 [VERBATIM](可選):- 指定命令的參數是否應該以原樣形式傳遞給命令。這會確保命令參數中的特殊字符不會被處理(例如空格不會被轉義)。通常當命令包含空格或特殊字符時會使用這個參數。
 
[USES_TERMINAL](可選):- 如果你需要在終端中執行命令(如交互式命令),則指定這個選項。在某些情況下,這會強制 CMake 在終端中啟動命令,而不是在 CMake 中的圖形界面中執行。
 
範例中的 add_custom_target:
在這個範例中:
run_app:- 是你創建的自定義目標名稱。執行 
cmake --build <build-dir> --target run_app或make run_app時,將會執行這個目標。 
- 是你創建的自定義目標名稱。執行 
 COMMAND ${CMAKE_COMMAND} -E env QT_QML_PLUGIN_PATH="C:/Qt/6.6.0/mingw_64/qml" ${CMAKE_BINARY_DIR}/bin/MyQtApp:- 這裡的 
COMMAND指定了要執行的命令。首先,它執行cmake的-E env命令來設置環境變數QT_QML_PLUGIN_PATH,然後運行位於${CMAKE_BINARY_DIR}/bin/MyQtApp的可執行文件(即你的應用程序)。 ${CMAKE_BINARY_DIR}是指 CMake 的構建目錄,bin/MyQtApp是構建過程中生成的可執行文件的路徑。這個命令確保在運行應用程式之前正確設置QT_QML_PLUGIN_PATH。
- 這裡的 
 DEPENDS MyQtApp:- 表示在執行 
run_app目標之前,必須先構建MyQtApp目標。這保證了MyQtApp可執行文件在運行之前已經被編譯完成。 
- 表示在執行 
 
MyQtApp 是目錄還是執行檔名稱?
MyQtApp 在這裡是可執行文件的名稱,而不是目錄名稱。
- 可執行文件:
MyQtApp是指你最終要運行的可執行文件的名稱(例如MyQtApp.exe,這取決於你的操作系統)。在構建過程中,這個可執行文件會被放置在 CMake 构建目錄中的bin/子目錄下(取決於 CMake 的設置)。 - 目錄:
MyQtApp在這裡不是一個目錄,而是最終生成的可執行檔案的名稱。如果你有其他的輸出目錄設置,它將被放在${CMAKE_BINARY_DIR}/bin/路徑下。 
總結
add_custom_target用來定義一個自定義的構建目標,它不會生成任何實際的檔案,而是執行某些命令或操作。- 參數 
COMMAND用來指定執行的命令,DEPENDS用來確保某個目標在執行前先被構建完成。 - 在範例中,
MyQtApp是可執行檔案的名稱,而不是目錄。 
如果你執行 cmake --build <build-dir> --target run_app,CMake 會先構建 MyQtApp,然後運行 run_app 目標,設置必要的環境變數並啟動應用程序。
沒有留言:
張貼留言