https://m.toutiao.com/is/Y5Phfp2/?=Linux開發(fā)工具 (一些人把常用的軟件提前編譯好做成軟件包(可以理解成windows上的安裝包原文檔小括號)直接進(jìn)行安裝) 一,、軟件包管理器yum1.什么是軟件包在Linux下安裝軟件, 通常的辦法是下載程序的源代碼、編譯,、得到可執(zhí)行程序,。但是這樣麻煩、不便于操作,,于是一些人把常用的軟件提前編譯好, 做成軟件包(可以理解成windows上的安裝包)放在一個服務(wù)器上, 通過包管理器可以很方便的獲取到這個編譯好的軟件包, 直接進(jìn)行安裝,。 軟件包和軟件包管理器, 就好比 'App' 和 '應(yīng)用商店' 這樣的關(guān)系,。 yum是Linux下非常常用的一種包管理器. 主要應(yīng)用在Fedora, RedHat, Centos等發(fā)行版上。 2.ping由于yum是從服務(wù)器上獲取安裝包,,關(guān)于 yum 的所有操作必須保證主機(jī)(虛擬機(jī))網(wǎng)絡(luò)暢通,,網(wǎng)絡(luò)是否暢通可以通過 ping 指令驗(yàn)證。 3.查看所有軟件包通過yum list可以看到所有的軟件包(軟件包有很多,,下圖只截取了其中一部分),。 通過與grep命令配合可以搜索出指定的軟件包。 4.安裝軟件包通過sudo yum install xxx可安裝xxx軟件,,這里以lrzsz為例進(jìn)行安裝,。 5.卸載軟件包卸載指令sudo yum remove xxx可卸載xxx軟件包,操作同上,。 二,、編輯器vim0.vim的配置原生的vim不便于使用,需要通過配置來讓它的使用更加方便,。 (1)配置文件在目錄 /etc/ 下面,,有一個名為vimrc的文件,這是系統(tǒng)中公共的vim配置文件,,對所有用戶都有效,。而在每個用戶的主目錄下,都可以自己建立私有的配置文件,,命名為:.vimrc,,在這里配置的vim不會影響其他用戶。 進(jìn)入用戶的主工作目錄,,找到自己目錄下的.vimrc文件,,執(zhí)行 vim .vimrc,即可配置自己的vim,。 (2)配置vim在其中輸入特殊的命令即可修改vim的選項(xiàng),,可以用下面三條命令進(jìn)行測試。 設(shè)置語法高亮: syntax on 顯示行號: set nu 設(shè)置縮進(jìn)的空格數(shù)為4: set shiftwidth=4 在shell命令行中執(zhí)行下面的指令(想在哪個用戶下讓vim配置生效, 就在哪個用戶下執(zhí)行這個指令. 強(qiáng)烈 '不推薦' 直接在 root 下執(zhí)行),,根據(jù)提示操作,,即可將vim變成一個c++編譯器。 curl -sLf gitee.com/HGtz2222/Vi… -o ./install.sh && bash ./install.sh (原文地址:gitee.com/HGtz2222/Vi… 1.vim的模式vim有許多模式,,在我使用的服務(wù)器上有七種基本模式和六種附加模式,。 本文只介紹常用的三種模式:命令模式(Normal mode)、插入模式(Insert mode),、底行模式(last line mode),。 2.模式間的轉(zhuǎn)變先上一張圖表示三種模式的關(guān)系。 vim打開時(shí)默認(rèn)是命令模式,如下,。 此時(shí)如果輸入一般的代碼很可能沒有響應(yīng),,因?yàn)樵诿钅J较拢瑅im將輸入的內(nèi)容當(dāng)做命令看待,,如果我們按照代碼輸入,,就很難會出現(xiàn)命令,所以大多數(shù)時(shí)候沒有反應(yīng),。 此時(shí)如果按一下i就可以轉(zhuǎn)入插入模式,,左下角會變成下圖的樣子,表示進(jìn)入插入模式,,這時(shí)就可以在編輯器內(nèi)輸入內(nèi)容,。 這時(shí)再按Esc退回普通/命令模式。 如果想要退出vim,,則要在底行模式(shift+,;即輸入一個:)下輸入q退出。輸入w可以保存,,但配置過的vim編輯器會自動保存,,所以w可省略;如果用的是原生的vim(沒有配置過的),,就需要手動保存,。 3.命令模式(Normal mode)(1)命令模式向插入模式轉(zhuǎn)換命令模式向插入模式轉(zhuǎn)換可以輸入:a(光標(biāo)向后移動一個字符后進(jìn)入插入模式),i(直接進(jìn)入插入模式),,o(換行后進(jìn)入插入模式)。 (2)命令模式下常用的編輯命令shift+^:光標(biāo)定位到當(dāng)前行的開頭shift+$:光標(biāo)定位到當(dāng)前行的末尾shift+g:光標(biāo)定位到當(dāng)前文本的最后一個位置gg:光標(biāo)定位到當(dāng)前文本的第一個位置n+shift+g:光標(biāo)定位到當(dāng)前文本第n行的開頭yy:復(fù)制光標(biāo)所在行n+yy:從光標(biāo)所在行開始,,復(fù)制下面n行的內(nèi)容p:粘貼內(nèi)容n+p:將內(nèi)容粘貼n行u:撤銷ctrl+r:恢復(fù)剛剛的撤銷dd:刪除光標(biāo)所在的行(這里是剪切,,也就是說刪除后可直接粘貼被刪除的內(nèi)容)n+dd:從光標(biāo)所在行開始,刪除下面n行的內(nèi)容shift+~:對光標(biāo)所在的位置進(jìn)行大小寫轉(zhuǎn)換w:以“單詞”為單位進(jìn)行跳轉(zhuǎn),,跳到下一個“單詞”的開頭(從左往右,從上到下)b:以“單詞”為單位進(jìn)行跳轉(zhuǎn),,跳到上一個“單詞”的開頭(從右往左,從下到上)e:以“單詞”為單位進(jìn)行跳轉(zhuǎn),跳到下一個“單詞”的結(jié)尾(從左往右,從上到下)(這里的“單詞”可能是一組字母,,也可能是符號)x:刪除光標(biāo)所在位置的內(nèi)容n+x:刪除從光標(biāo)開始n個位置的內(nèi)容shift+x:刪除光標(biāo)之前位置的內(nèi)容(不包括光標(biāo)所在位置)shift+n+x:刪除光標(biāo)之前x個位置的內(nèi)容(不包括光標(biāo)所在位置)r:輸入r之后再輸入內(nèi)容會將光標(biāo)所在位置的內(nèi)容進(jìn)行替換n+r:替換從光標(biāo)開始n個位置的內(nèi)容(每個位置的內(nèi)容都一樣)shift+r:進(jìn)入替換模式,,下面的操作全部是替換(按Esc返回命令模式)h、j,、k,、l:左、下,、上,、右(和方向鍵的功能相同,但是建議用字母而不是方向鍵,,因?yàn)榉较蜴I可能出現(xiàn)不兼容的問題)ctrl+b:下翻一頁ctrl+f:上翻一頁ctrl+u:下翻半頁ctrl+d:上翻半頁復(fù)制代碼 在命令模式下進(jìn)行文本編輯的效率非常高,,所以建議盡量在命令模式下編輯,。 4.插入模式(Insert mode)命令模式按a/i/o進(jìn)如插入模式,插入模式與Windows下正常的文本編輯沒什么區(qū)別,,此處不再贅述,。 5.底行模式(last line mode)命令模式shift+;進(jìn)入底行模式,,常用的命令如下: set nu:設(shè)置行號set nonu:取消行號w:寫入(保存)w!:強(qiáng)制寫入(但也有可能寫入不成功)q:退出q!:強(qiáng)制退出!+其他命令:在底行模式下,,輸入!后即可執(zhí)行l(wèi)s,ll,gcc等命令,即不退出vim就看執(zhí)行命令行的命令復(fù)制代碼 vs命令+filename:分屏顯示,,若filename不存在,,則會新建。 通過ctrl+w+w可在多個選項(xiàng)卡之間切換,。 注意分屏不僅僅可以分兩個,,分屏可以分許多個。 底行模式下退出分屏?xí)r,,光標(biāo)在哪個文件就退出哪個文件,。 三、編譯器gcc/g++gcc用來對C語言文件編譯,,g++用來對c++文件編譯,,選項(xiàng)幾乎是一樣的,下面以gcc為例,。 1.從源文件到可執(zhí)行文件從一個.c為后綴的源文件到一個.exe為后綴的可執(zhí)行文件需要經(jīng)過下面四個步驟,。 (1)預(yù)處理(-E)主要包括:頭文件展開、去注釋,、宏替換,、條件編譯。 在Linux中可以通過gcc的–E選項(xiàng)來讓源文件在預(yù)處理結(jié)束后停止并生成同名的.i后綴文件,。 (2)編譯(-S)檢查代碼的規(guī)范性,、是否有語法錯誤等,以確定代碼實(shí)際要做的工作,在檢查 無誤后,把C語言代碼翻譯成匯編語言,。 在Linux中可以通過gcc的–S選項(xiàng)來讓源文件在編譯結(jié)束后停止并生成同名的.s后綴文件,。 (3)匯編(-c)生成機(jī)器可識別代碼,把編譯階段生成的.s文件轉(zhuǎn)成目標(biāo).o文件,,轉(zhuǎn)化結(jié)束后,,文件是二進(jìn)制目標(biāo)文件。 在Linux中可以通過gcc的–c選項(xiàng)來讓源文件在匯編結(jié)束后停止并生成同名的.o后綴文件,。 (4)鏈接(無選項(xiàng))將代碼中庫函數(shù)的調(diào)用和庫中庫函數(shù)的實(shí)現(xiàn)關(guān)聯(lián)起來,。 這里要介紹一個概念:函數(shù)庫 函數(shù)庫一般分為靜態(tài)庫和動態(tài)庫兩種。 靜態(tài)庫鏈接時(shí)把庫文件的代碼全部加入到可執(zhí)行文件中,因此生成的文件占用的空間比較大,,但在運(yùn)行時(shí)也就不再需要庫文件了,,這樣程序的可移植性強(qiáng)。 靜態(tài)庫后綴名一般為.a,。 動態(tài)庫鏈接時(shí)不把庫文件的代碼加入到可執(zhí)行文件中,,而是在程序執(zhí)行時(shí)由鏈接文件加載庫,生成的文件體積小,、速度快,,但可移植性差。 動態(tài)庫一般后綴名為.so,。 gcc在鏈接時(shí)默認(rèn)使用動態(tài)庫,。 2.常用選項(xiàng)除了上面的-E、-S,、-c選項(xiàng)外,,下面還有一些常用選項(xiàng)。 -static:此選項(xiàng)對生成的文件采用靜態(tài)鏈接 -O0,、-O1,、-O2、-O3:編譯器優(yōu)化選項(xiàng)的4個級別,,-O0表示沒有優(yōu)化,,-O3優(yōu)化級別最高 -w:不生成任何警告信息。 -Wall:生成所有警告信息,。 -o+filename:將生成的文件命名為filename 四,、調(diào)試器gdb下面以一個簡單的從1加到100的代碼演示調(diào)試,源文件生成的可執(zhí)行文件為Mytest,。 代碼如下: 直接gdb+被調(diào)試文件名進(jìn)入調(diào)試,,如下 但最后提示沒有調(diào)試信息。這里是因?yàn)樵贑entos 7 gcc中默認(rèn)生成的可執(zhí)行程序是release版本的,,不可被調(diào)試。通過編譯時(shí)添加-g選項(xiàng)讓程序成為debug版本,。 1.顯示代碼list/l2.運(yùn)行r3.斷點(diǎn)b,、查看斷點(diǎn)info、刪除斷點(diǎn)d4.逐過程n(不進(jìn)入函數(shù)),、逐語句s(進(jìn)入函數(shù))5.臨時(shí)查看變量的值p6.添加查看display7.取消查看undisplay8.跳轉(zhuǎn)until9.結(jié)束函數(shù)finish10.跳轉(zhuǎn)到下一斷點(diǎn)c11.退出調(diào)試quit五,、自動化構(gòu)建:make+makefile1.背景一個工程中的源文件不計(jì)數(shù),其按類型,、功能,、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,,哪些文件需要后編譯,,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作,。 makefile帶來的好處就是——“自動化編譯”,,一旦寫好,只需要一個make命令,,整個工程完全自動編譯,,極大的提高了軟件開發(fā)的效率。 make是一條命令,,makefile是一個文件,,兩個搭配使用,完成項(xiàng)目自動化構(gòu)建 2.依賴關(guān)系,、依賴方法舉例如下: makefile中一行是依賴關(guān)系,,緊跟的一行是依賴方法。上面從一個.c文件到一個.exe文件經(jīng)歷的依賴關(guān)系和依賴方法寫全后如下,。 mytest依賴test.o經(jīng)過gcc鏈接得到,,test.o依賴test.s經(jīng)過gcc -c匯編得到,test.s依賴test.i經(jīng)過gcc -S編譯得到,,test.i依賴test.c經(jīng)過gcc -E預(yù)處理得到,。 (冒號左邊是得到的文件,冒號右邊是被依賴的文件) make后就可以得到所有需要的文件,。 雖然這些過程在這個場景下可以gcc一步搞定,,但是如果有其它多個文件需要處理,這么多行的指令寫進(jìn)makefile后只需一個make即可全部執(zhí)行,,效率有很大的提高,。 3.項(xiàng)目清理可以看到上面產(chǎn)生了許多文件,如果一個個清理又會很麻煩,,在makefile中 加入clean選項(xiàng)便可像make那樣直接清除某些文件,。 上面的.PHONY是偽目標(biāo),這樣寫表示clean總是被執(zhí)行,。 4.宏替換$@:依賴關(guān)系中的目標(biāo)文件(冒號左邊的文件) $^:依賴關(guān)系中的依賴文件列表(冒號右邊的所有文件) $<:依賴關(guān)系中的一個依賴文件 將makefile修改為如下宏替換后的結(jié)果,,這樣當(dāng)依賴文件或目標(biāo)文件改變時(shí),依賴方法不需要改變,。 仍能正常運(yùn)行,。 感謝閱讀,如有錯誤請批評指正
|
|