VisualGDB:使用VS建立CMake Linux專案
根據VisualGDB官網(https://visualgdb.com)的幫助文件大致翻譯而成。主要是作為個人學習記錄。有錯誤的地方,Robin歡迎大家指正。
本文介紹如何使用VS來建立、構建、除錯一個基於CMake的專案。當編輯該專案時,會使用高階CMake專案子系統來自動更新CMakeLists.txt檔案。
注意:開始本文如下步驟之前,確保所使用的VisualGDB為5.3或更新版本。
1 選擇Linux專案嚮導
啟動VS並開啟”New Project”對話方塊。”VisualGDB”下選擇”Linux Project Wizard”:
2 選擇專案型別
在”New Linux Project”頁面,”Create a new project”->”Application(executable file)”->”Use CMake”,並勾選”Use the advanced CMake Project Subsystem”複選框:
3 選擇Linux電腦
在下一頁選擇你的目標Linux電腦並點選”Next”。如果你之前沒有使用VisualGDB配置過到這臺電腦的連線,參考《使用VS來開發Linux程式》來建立連線。
4 設定原始碼訪問方式
下一頁設定Linux機器如何訪問原始碼。最簡單的方式是採用預設設定:將修改的原始碼更新到Linux機器上。
你也可以配置VisualGDB將原始碼直接儲存在Linux機器上,並通過SSH方式訪問。具體參考《配置VS直接通過SSH方式訪問Linux專案》。
5 構建專案
專案建立好後,點選Ctrl+Shift+B來build你的solution:
6 斷點除錯
在main()函式中設定一個斷點,按F5確保專案能夠除錯:
7 GUI方式管理專案target及修改各種配置
接下來介紹如何使用GUI來管理專案targets及修改各種settings。
7.1 再建立一個可執行程式
首先我們在建立一個可執行程式。Solution Explorer中,在”.vgdbcmake”節點上右鍵點選,選擇”Add”->”New Item”,選擇”Executable”,並在location中新增子目錄”/subdir”:
VisualGDB會自動建立”subdir”資料夾,並在該資料夾下建立一個CMakeLists.txt檔案,然後使主程式的CMakeLists檔案引用該CMakeLists.txt檔案。
然後將main.cpp檔案的記憶體拷貝到新程式的檔案中(只是需要替換hello資訊),並構建該專案:
7.2 在新程式中再新增一個原始檔
在新專案AnotherExecutable中再新增一個原始檔:
在location中新增資料夾”subdir2”,並將新的原始檔儲存到該資料夾下:
7.3 配置屬性/引數
在VisualGDB CMake Project中的每個CMake target都擁有各自獨立的properties set。
除錯相關的properties,比如命令列引數,都存到各自的專案檔案中。
構建(build)相關的properties,比如include目錄,將自動儲存到CMakeLists.txt檔案中。
對於主應用程式,開啟VS Project Properties,並設定命令列引數為非空值:
7.4 除錯觀察
在主程式上右鍵,選擇”Debug”->”Start”,啟動一個新的程式例項並開始除錯它:
現在可以觀察一下VisualGDB如何啟動選擇的目標,以及命令列引數如何匹配target settings所設定的引數:
8 對原始檔和目標進行分組管理
開啟專案的VS Properties(通過節點.vgdbcmake),可以使用”Sorting/Grouping”下的配置來控制VisualGDB的分組策略。比如,設定”Group Source By Types”為”False”:
設定後,可以看到”Source Files”節點消失了,然後所有的原始檔顯示在目標節點下:
9 CMake如何處理子專案
下面我們將展示CMake如何處理子專案。從子目錄下開啟檔案CMakeLists.txt並新增如下程式碼:
project(subproj)
儲存CMakeLists檔案後觀察Solution Explorer,可以看到兩個專案節點,每個專案都有一個宣告:
10 冗餘目標過濾隱藏
如果一個CMake專案包括其他專案,CMake將會兩次展示被包含專案(inner project,內部專案):一次是作為外部專案(including project/outer project)的部分,一次是作為內部專案(included project/inner project)的部分。
這顯然很不方便,VisualGDB能夠自動隱藏冗餘目標例項。可以使用VS settings中的”Hide Redundant Targets” settings來對.vgdbcmake專案進行控制過濾:
如果選擇了”HideInnerProjectTargets”,所有的targets作為外部專案來展示(就像沒有內嵌的專案一樣)。
如果選擇了” HideOuterProjectTargets”,VisualGDB將會顯示內部專案節點中的所有targets(targets inside the inner project nodes)。
11 構建時進行專案過期檢測
和MSBuild專案不同的是,除非你要對專案進行構建(build),否則CMake專案不會自動檢測專案是否過期。所以,當你嘗試要除錯一個專案時,將會彈出提示對該專案進行構建:
如果想改變這種行為,需要開啟”Rely on CMake up-to-date Check”,並重新載入該專案:
請注意,上面這種機制並不是一直有效:CMake經常錯誤地判斷一些大型的專案過期了,而實際上它們並沒有過期。所有,要使用View->Output->VisualGDB CMake Output面板來觀察CMake的診斷輸出。
12 包含多目錄多目標的CMake專案的構建
如果一個CMake專案在多個目錄下包含多個目標(targets),可以選擇性的構建選中的目錄。在目標節點上右鍵,然後選擇”Build Target”:
注意,如果相同的目錄下包含多個targets,這個”Build Target”命令將會build該目錄下的所有targets。
13 如何編輯target properties
下面介紹如何編輯目標的properties。選擇其中一個target,開啟VS Project Properties,並設定Warning Level為Pedantic:
然後觀察VisualGDB如何自動將target_compile_options宣告新增到對應的CMakeLists檔案中:
14 如何為CMake專案設定全域性settings
最後介紹如何為VisualGDB CMake專案設定全域性的settings。在專案節點上右鍵選擇”VisualGDB Project Properties”:
在VisualGDB Project Properties視窗中,可以配置各種settings,比如Intellisense,static code analysis,debug/deployment settings: