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
目標,設置必要的環境變數並啟動應用程序。
沒有留言:
張貼留言