深入講解GCC和Make的區別(有涉及makefile文件喲!!!)


gcc是編譯器 而make不是 make是依賴於Makefile來編譯多個源文件的工具 在Makefile里同樣是用gcc(或者別的編譯器)來編譯程序.

gcc是編譯一個文件,make是編譯多個源文件的工程文件的工具。 make是一個命令工具,是一個解釋makefile中指令的命令工具。

make就是一個gcc/g++的調度器,通過讀入一個文件(默認文件名為Makefile或者makefile),執行一組以gcc/g++為主的shell命令序列。輸入文件主要用來記錄文件之間的依賴關系和命令執行順序。

gcc是編譯工具; make是定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯; 也就是說make是調用gcc的。

要是好好分析過一個makefile文件就不會這么問了。

剛接觸linux編程,很多概論都比較模糊,今天突然用到makefile文件,想到了make與gcc的關系。於是查閱了一些資料,在此做一個小結:

1.gcc是編譯一個文件,make是編譯多個源文件的工程文件的工具。

2.make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一種在工程方面的編譯方法。

3.make就是按照makefile腳本對整個項目的各個文件進行分別編譯和鏈接,makefile基本上就是"目標"(target),"關連"(dependencies)   和"動作"三者所組成的腳本。makefile 文件是許多編譯器--包括 Windows NT 下的編譯器--維護編譯信息的常用方法,只是在集成開發環境中,用戶通過友好的界面修改 makefile 文件而已。make除了可以做到編譯和連結,也可以把如何產生文檔(如manual  page,   info檔及   dvi 檔)   ,以及打包壓縮都完成。

4.make 可以說是一個批處理程序,它可以自動編譯多個文件。當然寫好的腳本是前提。MAKE是運用GCC去編譯文件的。

5.Makefile文件作為一種描述文檔一般需要包含以下內容:

◆ 宏定義

◆ 源文件之間的相互依賴關系

◆ 可執行的命令

Makefile中允許使用簡單的宏指代源文件及其相關編譯信息,在Linux中也稱宏為變量。在引用宏時只需在變量前加$符號,但值得注意的是,如果變量名的長度超過一個字符,在引用時就必須加圓括號()。

下面都是有效的宏引用:

$(CFLAGS)

$Z

$(Z)

其中最后兩個引用是完全一致的。

個人總結:

gcc就是一個純編譯器

而make更牛逼些 包括了gcc  

只有把makefile解決 一切ok

以上部分來源於網絡,如果你對gcc和make理解要求不深的話上面的話基本可以打發你了,本人在Linux上小玩了兩把gcc和make對這兩個命令感覺深有體會,具體如下:

gcc就是我們熟悉的C語言編譯程序,這個主要是GNU項目下產生的一個開源程序,說白了,就是告訴系統,你下面要對C的文件干嘛了,主要有兩種:編譯、鏈接。例:gcc -c hello.c 、gcc -o hello hello.o,但是我們基本一次搞定:gcc hello.c

make其實也是個程序,但是這個程序和gcc不是一個意思,他主要的工作是引導,也就是說,這個程序干什么,你是可以“要求的”,牛逼吧,所以就有了makefile這個文件,因為當你make的時候,他得首先找到makefile這個文件,才知道他要干嘛!!!而巧的是makefile這個文件里面基本寫的都是gcc的命令,所以當你使用make的時候就會發現怎么和gcc最后的結果是一樣的呀!!而我們一般使用make的時候,往往很多人不是自己寫的makefile這個文件,導致很多人對gcc和make稀里糊塗的,以下我貼出自己寫的一個makefile文件以供參考:

main: main.o haha.o sin_value.o cos_value.o

             gcc -o main main.o haha.o sin_value.o cos_value.o

clean:

             rm -f main *.o

#gcc和rm前面是‘tab’

#這個makefile文件是有兩個作用的一個是建立一個是刪除文件分別命令是:make main和make rm,當然如果你使用make那系統默認是make #main這個了~~~~

 轉自:https://cloud.tencent.com/developer/article/1343055

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM