Makefile,學習linux及開源軟件的瑞士軍刀

在linux下面安裝軟件,我們經常使用的命令是:

./configure
make
make install

很多人不知道,爲什麼我們敲入這幾個命令,我們的源碼文件就開始編譯成可執行程序了?而且在shell控制窗口還會有逼格地顯示不斷滾動的字符雨,顯得特別高大上。

其實,這一切,都是makefile在背後“搞鬼”,makefile文件裏,定義了我們編譯源文件的規則,make命令就是根據makefile裏面的規則,纔將源程序文件編譯成了可執行程序。

平時,在windows下面寫一個程序,比如C程序,我們經常使用VC6.0、C-free等集成開發環境,簡稱IDE。我們新建一個C文件,編輯好我們的程序,然後點擊運行按鈕,程序瞬間就可以運行。

但是在linux下面,沒有這麼人性化的集成開發環境,如果你想寫一個程序,從編輯程序、到編譯、調試都要自己擼袖子自己完成,需要在shell黑漆漆的窗口下,使用命令行完成。比如我們在linux目錄下,新建了一個hello.c

#include<stdio.h>
int main()
{
    printf("hello world!\n");
    return 0;
}

寫好這個程序後,接着你就可以使用:

gcc -o hello hello.c

命令,就可以生成可執行程序hello了。

如果每次敲入命令你嫌麻煩,可以在hello.c的當前目錄下,創建一個makefile文件,然後編輯makefile文件:

hello:hello.c
    gcc -o hello hello.c

保存後,我們在當前目錄下敲入make命令,也可以直接生成可執行程序hello了!看,makefile幫我們自動編譯了程序,再也不用痛苦地敲gcc命令了!媽媽再也不用擔心我晚回家吃飯了!

在這個文件中,我們定義了一個規則,用來告訴make工具如何將hello.c編譯成hello可執行文件。當然,這個makefile文件是比較簡單的。當我們的項目有成千上萬的源文件時,我們通過makefile定義這些編譯規則,然後在命令行下直接敲入make,就可以直接編譯,是不是有種君臨城下的感覺?

比如linux,現在已經1000多萬行代碼了,幾萬個文件,我們直接一個make,就可以看着shell窗口不斷滾動的字符雨,最後編譯成我們想要的linux內核鏡像文件,是不是感覺很神奇?學習了makefile,你會發現,其實這並不難。通過學習,你也可以編寫一個makefile,去編譯一個項目工程的源代碼文件!


學習makefile有哪些好處呢?

首先對於IT企業來說,尤其是從事linux、蘋果MAC系統下面的開發,makefile是必須掌握的,就像我們在windows下面掌握VC6.0、Visual Studio一樣,不然開發無從談起。

對於項目經理、項目負責人、架構師來說,不會makefile,老闆讓你負責一個項目,你要搭建起來吧,要把軟件框架搭好吧,不會makefile,想搭建起來夠嗆。

對於在校學生來說,通過makefile的學習,你會對軟件構造系統,比如程序是如何編譯和鏈接的、庫的機制和原理、靜態庫、動態庫是如何編譯生成和使用的,會有一個很深刻的理解。這對你以後從事IT行業、嵌入式行業開發工作有很大的幫助:學習makefile就相當於你練了九陽神功,接着再去練乾坤大挪移,就不會感到很吃力了~

同時,作爲在校學生,如果你會makefile,甚至是makefile的專家,會自己獨立搭建一個項目,開展一個項目,當你面試時,當面試官看到你有這方面的黑科技能力,肯定會眼前一亮。

同時,學習了makefile了,對於我們分析開源軟件,尤其是linux內核這樣的複雜無比的超大型軟件項目時,makefile就像一幅linux的內核地圖,會引領我們去在linux幾千萬行的代碼文件裏遨遊,而不會迷路。makefile就像一把瑞士軍刀,一把插入linux的內核心臟!

《makefile工程實踐》,一步一步從零開始,帶你寫一個項目的makefile,讓你擁有獨立搭建項目的能力。51CTO學院正式首發,想學習的小夥伴可以去湊熱鬧了:http://edu.51cto.com/course/course_id-8094.html


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