1. 程式人生 > >VisualGDB:使用VS建立CMake Linux專案

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: