ctags 和Makefile的簡單使用

ctags

ctags是vim下方便代碼閱讀的工具。儘管ctags也可以支持其它編輯器,但是它正式支持的只有VIM。並且VIM中已經默認安裝了Ctags,它可以幫助程序員很容易地瀏覽源代碼。(尤其是大型的工程)

一、安裝ctags

1、命令行安裝

切換到root用戶之下,輸入yum install ctags

2、下載源碼安裝(網上提供的方法)

       1)從http://ctags.sourceforge.net/下載源代碼包後,解壓縮生成源代碼目錄,

       2)然後進入源代碼根目錄執行./configure,

       3)然後執行make,

       4)編譯成功後執行make install


二、簡單的使用

        1)ctags-R:在當前目錄下建立索引

        2)Ctrl + ](右方括號) :跳轉到函數或變量的定義處

        3)Ctrl + T :跳轉至上級

例如:

一個工程中含有my_tags.h、ctags.c、main.c三個源文件

內容分別爲

wKiom1dJT9HBXS9qAACcGH-hhaM903.png

輸入ctags - R在當前目錄下面創建一個索引

wKioL1dJUayC7T8yAABWuigz-LA489.png

打開main.c或者my_tags.h,將光標放到fun處,按ctrl + ]即可跳轉到函數定義處

再按ctrl +T跳轉 至上級


Makefile

        會不會寫makele,從一個側面說明了一個人是否具備完成大型工程的能力。 一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makele 定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因爲makele就像一個Shell腳本一樣, 其中也可以執行操作系統的命令。makele帶來的好處就是——“自動化編譯”,一旦寫 好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。


make是一個動作而Makefile是一個文件

make命令執行時,需要一個 Makele 文件,以告訴make命令需要怎麼樣的去編譯和鏈接程序。

 

Makefile文件中主要是文件的依賴關係和依賴方式。

  在定義好依賴關係後,後續的那一行定義瞭如何生成目標文件的操作系統命令,一定要以Tab鍵開頭。make並不管命令是怎麼工作的,他只管執行所定義的命令。

  make是如何工作的?

  (1) make會在當前目錄下找名字叫“Makefile”或“makefile”。

  (2) 如果找到,它會找文件中的第一個目標文件.o。

  (3) 如果文件不存在,它會根據依賴關係找.s文件。

  (4) 若.s文件不存在,make會在當前文件中找目標爲.s文件的依賴性即.i。

  (5) 若.i文件不存在,根據依賴關係會找.c文件,當然.c文件時存在的啦。於是,make會生成一個.o文件,然後去執行文件。


  這就是整個make的依賴性,make會一層一層去找文件的依賴關係,直到最終編譯出第一個目標文件。在找的過程中,如果出錯,如:最後被依賴的文件找不到,make會直接退出,並報錯,對於定義的命令的錯誤或者編譯不成功,make不管。make只管文件的依賴性,即如果找到依賴關係之後,冒號後邊的文件不存在,make也不工作。


  清理目標文件的規則:

  每一個Makefile中都應該寫一個清理目標文件(.o和執行文件)的規則,這不僅便於重編譯,也有利於保持文件的清潔。

  .PHONY:clean

  clean:

       rm -f 文件

  .PHONY後邊的clean事宜“僞目標”。在rm命令前面加上一個小減號的意思是,就算某些文件處理問題,不要管,繼續做後邊的事情。不要將clean的規則放到文件的開頭,不然出成爲make的默認目標。

例如:爲proc.c編寫一個Makefile

在proc.c當前目錄下創建一個Makfile文件,並在Makefile文件中編輯如下

wKiom1dJW4ajv2fkAABhU0bH99Q615.png

或者

wKiom1dJXEbQ0VL1AAA-dOe150Y344.png

運行Makefile

make

wKioL1dJXcWxsz3nAABLJpXGgX4905.png

清除Makefile產生的多餘文件

make clean


注意事項:

1、編寫依賴方式時,一定要以Tab鍵開頭(不能用空格代替)

2、clean一般都放在文件的最後

3、@可以屏蔽輸出依賴方式

4、makefile 默認值生成一個目標文件,就停止



在Linux下編寫一個簡單的進度條

在編寫之前先來了解一個奇妙的現象,有"\n"

wKiom1dJX3TDRfmVAAAcNVYrJBc447.png 


運行結果爲:

wKioL1dJYOWykJ3EAAAzhCC5hOE726.png


hello world早早運行完畢但是2秒之後程序纔會運行完畢 


wKiom1dJYQugKQoiAAAfNQiy33A322.png


運行結果

wKioL1dJYriyTp6_AAAiWR9pSHM411.png

系統2秒之後纔會輸出hello world


這是爲什麼呢?

注意:'\n'回車並換行,執行printf時先寫到行緩衝,遇到\n的時候將行緩衝的內容刷出 

所以第一個程序中是先輸出hello world然後再休眠,第二個程序中,由於沒有'\n',所以不會輸出hello world,當程序運行完畢之後,系統會自動刷新緩衝區,這時纔會輸出hello world。


進度條實現原理


1)實現動態的增長

可以定義一個數組,並設置一個計數器,當數字增加的同時,給字符數組每次增加一個元素,並且打印時覆蓋之前的數組。

2)保證打印信息在同一行

每次將光標定位到最左邊,從光標處打印,使用’\r‘,回車

3)複製動態的效果實現

定義一個數組

char index[4] = {'|', '/', '-', '\\'};

index[count%4];

4)實現打印長度相同

%-100s 

5)給人複製的效果

每輸出一次,程序掛起一段時間


實現代碼

wKiom1dJaBrBCm9KAACAoPx7R5A440.png


效果

wKiom1dJaGmwMQf4AAAwK2KDu3c702.png

wKiom1dJaHyCqj1qAAASVjRgXQE063.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章