天天看點

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具

本節書摘來自異步社群《linux 進階程式設計(第三版)》一書中的第2章,第2.1節,作者:楊宗德 , 呂光宏 , 劉雍著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

linux 進階程式設計(第三版)

linux作業系統絕大多數的核心代碼都是由c語言編寫,是以,在linux下的應用程式,特别是需要與核心進行互動的程式一般都是由c語言編寫的,c++程式并不多見,例如驅動開發幾乎都是由c語言編寫的。是以,本書所有内容都立足于linux下的c程式開發。本章主要介紹linux下進行c語言程式開發所必備的工具。

本章第1節主要介紹linux環境下常用的開發工具,包括常用的編輯器。這些編輯器類似于windows平台下的記事本和word工具,但比記事本的功能要強大得多,在很多方面連word工具也不能及。不過,對于熟悉windows操作的使用者來說,字元界面會有一些不習慣,需要有一個熟悉的過程。本節主要介紹vim編輯器、emacs編輯器以及源代碼檢視工具source insight。

本章第2節主要介紹linux下gcc/g++的編譯環境以及gdb調試工具,gcc編譯工具是目前應用最為廣泛的c語言編譯工具,很多windows平台的編譯器都是基于gcc開發的。gdb是linux下最強大的調試工具,它與gcc編譯器一起構成linux下c程式開發所不可缺少的工具。本節僅介紹了這幾個工具的基本使用過程,關于它們的詳細介紹見本書後續章節内容。讀者在學習本書時,在掌握基本工具的使用後,應該首先着眼于本書前面所介紹的檔案管理方式、程序管理、線程管理以及網絡程式設計的思想、作業系統提供的服務,當有了一定的代碼量後,再利用這些工具來管理編譯大量的源代碼,進而提高編碼效率。

2.1.1 vim編輯器

vim編輯器(vim是vi編輯器的更新(vi improved),專門針對程式員)是unix/linux作業系統下标準的編輯器,它強大的功能不遜色于任何最新的文本編輯器。對于unix/linux系統的任何版本而言,vim編輯器都是完全相同的,是以可以在所有平台上使用。目前,絕大多數linux系統管理人員和程式設計人員都選此編輯器編輯檔案。

1.vim編輯器的基本模式

vim編輯器基本上可以分為3種模式,分别是指令模式(command mode)、插入模式(insert mode)和底行模式(last line mode),圖2-1為vim各種模式互相轉換的關系圖。

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具

指令模式:控制螢幕光标的移動,進行文本的删除、複制等文字編輯工作(不使用del鍵和backspace鍵),以及進入插入模式和底行模式,在任何模式下要回到指令模式需按esc鍵。

插入模式:隻有在插入模式下,才可以輸入文字。按esc鍵可回到指令行模式。很多vim編輯器使用者希望一打開vim就可以輸入内容,但這不能實作,因為剛打開的vim編輯器處于指令模式。

底行模式:儲存檔案或退出vim,同時也可以設定編輯環境和一些編譯工作,如列出行号、尋找字元串等。在指令行模式下輸入冒号可以進入底行模式。

部分教材中把vim編輯器簡化成兩個模式,将底行模式也算作指令行模式。

2.編寫hello源程式

在shell指令提示符下輸入:

進入圖2-2所示的vim編輯器,此時為指令行模式,在此模式下輸入指令a(光标後面插入)或指令i(光标前插入),進入圖2-3所示的插入模式(在編輯器左下方出現“插入”字元),即可以輸入内容。

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具

在編輯界面輸入所有程式代碼:

如果需要快速跳轉到程式的首部或尾部,在指令模式下使用按鍵“{”則可跳轉到文檔的首部,按鍵“}”則可跳轉到檔案尾部。其他指令請參閱vim編輯器指令手冊,這裡不再綴叙。

如果使用者在目前工作目錄下具有寫權限,則可以将檔案儲存到目前目錄下。此時需要進入底行模式(按esc鍵後再按冒号進入底行模式),輸入以下内容:

則将檔案儲存(write)到目前目錄(當然也可以加上路徑,将其存儲在别的位置)并退出(quit)vim,前提是,在相應的路徑下有寫的權限。

3.定制vim

對于linux進階使用者而言,例如程式員,希望定制vim編輯器的屬性,以友善代碼的編寫。vim的配置檔案為“~/.vimrc”(前面的小點為隐藏檔案),vim啟動時會執行該檔案。

如果目前系統沒有 “~/.vimrc”檔案,則可以複制一份vimrc示例檔案到“~/.vimrc”。該示例檔案的絕對路徑可以在vim底行模式下輸入以下指令獲得:

在結果中找到該檔案的絕對路徑:

請按 enter鍵或其他指令繼續

找到示例配置檔案後,如下所示複制到目前工作路徑下,并命名為.vimrc:

如果将平時在底行模式下輸入的指令直接寫入到該檔案,則以後使用vim時不用再次輸入這些指令。下面介紹幾個常用的底行模式指令。

(1)程式代碼常用的縮進風格在vim中可以使用縮進指令實作自動縮進。此縮進指令會根據關鍵字自動識别。例如,if….else結構,它的實作方式如下:

設定縮進指令:

(2)顯示光标行列資訊。在vim的右下角有一個數值會根據光标的移動而變化,如果在預設方式下此項功能沒有開啟,請輸入指令:

(3)檢視制表符。如果需要檢視制表符,需要使用以下指令:

(4)檢視行數資訊。如果需要顯示檔案内容具體行數,則輸入以下指令:

(5)關鍵字高亮。程式的關鍵字太多,要想準确記住每一個是比較困難的。vim提供的文法高亮顯示可以幫助使用者正确輸入。

(6)多檔案編輯。在編寫程式時可能需要同時編輯多個檔案,在這種情況下,需要對vim的顯示視窗進行分割。

如果不輸入檔案名的話,分割的視窗中顯示的檔案将是分割前編輯的檔案,使用“ctrl+w”可以在不同的視窗間進行切換。使用vspilt指令可以垂直分割vim視窗。

讀者可以将這些指令編輯到配置檔案中,以便下次啟動vim編輯器時直接完成這些設定。

2.1.2 emacs編輯器

emacs程式的最初版本是richardstallman在1975年寫成的,之後其衍生版本衆多。目前使用最多的兩個版本是richardstallman在1984年開發的gnuemacs和jamiezawinski在1991年開發的xemacs。

當安裝了emacs後,在shell提示符下輸入:

即可打開圖2-4所示的emacs編輯器編輯界面。在此界面中,可以将emacs作為一個文本編輯器,輸入文本資訊。同樣,emacs編輯器也支援很多編輯指令,表2-1列出了部分基本指令。

emacs特别适合編輯程式,包括任何類型的計算機語言程式。它提供了文法加亮、自動縮進等功能。一些擴充指令可以讓使用者很友善浏覽代碼,它們可以識别代碼的語義,列出函數名、函數的參數和類型、變量名、類、宏、方法、define和include 的檔案。編輯程式時,emacs可以提供補全函數名、參數等功能。

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具
《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具

2.1.3 source insight工具

source insight是一個圖形化的源代碼檢視工具(當然也可以作為編輯工具)。如果一個項目的源代碼較多,此工具可以很友善地查找出源代碼之間的依賴關系,例如,某一個宏的定義位置,某一個自定義的資料類型的原始定義。讀者可以通過網絡下載下傳此工具。

讀者可以使用source insight工具将應用程式設計所用的頭檔案(主要位于/usr/include目錄下)下載下傳到windows平台,建立各檔案間的關聯,進而可以便捷地查閱linux各資料類型的定義原型。在linux系統下類似的工具為kscope。

1.建立工程

圖2-5所示是某嵌入式作業系統源代碼檔案清單,檔案内容較多,如果逐個打開檔案檢視源代碼,顯然不便于查找。下面介紹如何建立一個項目以友善檢視這個作業系統的源代碼。

(1)如圖2-6所示,打開source insight建立項目,單擊菜單指令“project-new project”,打開如圖2-7所示的建立項目對話框(如果要關閉已經打開的項目可以單擊菜單指令“project-close project”)。

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具

(2)在圖2-7所示對話框的“new project name”文本框中輸入項目名(本例中為ucosii),在下面的文本框中輸入項目檔案的存儲位置(或者單擊右側的“browse”按鈕選擇),然後單擊“ok”按鈕打開圖2-8所示的對話框。

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具

(3)在圖2-8所示對話框中部的文本框内輸入源代碼檔案的位置(本例為“e:source”),其他儲存預設設定,單擊“ok”按鈕打開如圖2-9所示的對話框。

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具

(4)圖2-9所示對話框的左側列出了源代碼目錄,右側列出該目錄下的檔案。如果選擇的目錄正确,則選中要添加的檔案,單擊“add”按鈕将該檔案添加到項目中;如果要添加目前目錄下所有檔案,單擊“add all”按鈕即可完成操作;如果要添加目前檔案夾下包括子目錄所有檔案,單擊“add tree”按鈕即可。

(5)完成添加後,對話框下側将列出所有添加的檔案如圖2-10所示。

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具

(6)完成所有檔案添加操作後,單擊“close”按鈕傳回如圖2-11所示的界面,将在工作面闆右側列出所有已經添加的檔案(如果沒有,單擊菜單指令“view-project windows”打開該面闆),輕按兩下任何一個檔案,将在左側列出該檔案的内容。

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具

(7)在完成添加操作後,如圖2-12所示,單擊菜單指令“project-synchronize”将關聯各檔案。如果要重新添加新檔案或者删除某個檔案,單擊如圖2-13所示的菜單指令“project-add and remove project files”,打開圖2-10所示對話框重新添加删除檔案。

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具

2.檢視功能

如果要檢視某個函數、宏、變量的定義關聯,可将光标放置在欲查找的關鍵字位置,此時,如圖2-14所示,在下方将自動顯示該關鍵字的定義,如果要繼續追溯,輕按兩下下方顯示内容,将跳轉到該檔案,進而可以繼續查找。

3.搜尋功能

如圖2-15所示,如果要在目前項目中搜尋某個關鍵字出現的位置,單擊菜單指令“search-search project”将打開如圖2-16所示的搜尋對話。

在圖2-16所示對話框的“find keywords”文本框中輸入要搜尋的關鍵字,在整個項目中搜尋,其他保持預設設定。單擊按鈕“search”将傳回如圖2-17所示内容,當然,要求确實存在該關鍵字相關的内容。

如圖2-17所示,将光标放置在比對的行上,在界面下側将列出該行所在檔案内容,輕按兩下下方比對内容,将跳轉到該檔案。

《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具
《Linux 進階程式設計(第三版)》——第2章 Linux下C語言開發工具 2.1 常用編輯工具