根據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:

