歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 【Linux】make的工作原理和makefile文件

【Linux】make的工作原理和makefile文件

日期:2017/3/3 12:01:34   编辑:Linux技術
● makefile文件
make是一個命令,makefile是一個文件。make命令執行時,需要一個 Makefile 文件,以告訴make命令需要怎麼樣的去編譯和鏈接程序。一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因為makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。makefile 帶來的好處就是------“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。
下面進行具體說明。
1、建立test.h、test.c和main.c文件
650) this.width=650;" title="源代碼.png" alt="wKiom1dOTJ_gdbniAAB46WqpPwY397.png-wh_50" src="http://s2.51cto.com/wyfs02/M02/82/33/wKiom1dOTJ_gdbniAAB46WqpPwY397.png-wh_500x0-wm_3-wmp_4-s_4038624531.png" />
2、如果不建立makefile文件,我們就需要依次進行編譯鏈接
650) this.width=650;" title="1.png" alt="wKiom1dOT-CiJ7RwAAA0xmGu7vI432.png-wh_50" src="http://s3.51cto.com/wyfs02/M00/82/33/wKiom1dOT-CiJ7RwAAA0xmGu7vI432.png-wh_500x0-wm_3-wmp_4-s_726486200.png" />
3、編寫makefile文件
一旦改變了某一文件的程序,就需要重新進行上述操作,太過繁瑣,於是我們建立makefile文件進行自動化編譯,包括自動清除所有編譯結果。
650) this.width=650;" title="makefile.png" alt="wKioL1dOVF2Cm3cxAACGkUOfaU4314.png-wh_50" src="http://s2.51cto.com/wyfs02/M00/82/32/wKioL1dOVF2Cm3cxAACGkUOfaU4314.png-wh_500x0-wm_3-wmp_4-s_1377021678.png" />
注:在依賴方法那行,一定要以Tab鍵開頭。“.PHONY”表示,clear是個偽目標文件。
● make的工作原理
在默認的方式下,也就是我們只輸入make命令,那麼make會進行以下步驟。
1、make會在當前目錄下找名字叫“Makefile”或“makefile”的文件。
2、如果找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到“edit”這個文件,並把這個文件作為最終的目標文件。
3、如果edit文件不存在,或是edit所依賴的後面的 .o 文件的文件修改時間要比edit這個文件新,那麼,他就會執行後面所定義的命令來生成edit這個文件。
4、如果edit所依賴的.o文件也不存在,那麼make會在當前文件中找目標為.o文件的依賴性,如果找到則再根據那一個規則生成.o文件。(這有點像一個堆棧的過程)
5、當然,你的C文件和H文件是存在的啦,於是make會生成 .o 文件,然後再用 .o 文件生命make的終極任務,也就是執行文件edit了。
這就是整個make的依賴性,make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件。
》》》輸入make命令
650) this.width=650;" title="make .png" alt="wKiom1dOUQPRxsQ3AAAdM4P7aGc275.png-wh_50" src="http://s4.51cto.com/wyfs02/M02/82/33/wKiom1dOUQPRxsQ3AAAdM4P7aGc275.png-wh_500x0-wm_3-wmp_4-s_2577801377.png" />
輸入make命令後自動生成了-i,-s,-o和main文件。
650) this.width=650;" title="make後.png" alt="wKioL1dOU2SCfbWLAAA3lis1zsg487.png-wh_50" src="http://s2.51cto.com/wyfs02/M02/82/32/wKioL1dOU2SCfbWLAAA3lis1zsg487.png-wh_500x0-wm_3-wmp_4-s_4092501720.png" />
》》》輸入make clear命令
650) this.width=650;" title="make clear.png" alt="wKioL1dOVO7gDk_YAAAdAgRT-0E438.png-wh_50" src="http://s3.51cto.com/wyfs02/M01/82/32/wKioL1dOVO7gDk_YAAAdAgRT-0E438.png-wh_500x0-wm_3-wmp_4-s_1670460181.png" />
在依賴關系前加@,可屏蔽細節
650) this.width=650;" title="@.png" alt="wKiom1dOVEjAjkOrAABDhNI1Sus783.png-wh_50" src="http://s2.51cto.com/wyfs02/M00/82/33/wKiom1dOVEjAjkOrAABDhNI1Sus783.png-wh_500x0-wm_3-wmp_4-s_688240878.png" />
》》》ctags:linux代碼查看
ctags是vim下方便代碼閱讀的工具。盡管ctags也可以支持其它編輯器,但是它正式支持的只有VIM。並且VIM中已經默認安裝了Ctags,它可以幫助程序員很容易地浏覽源代碼。
如果沒有安裝ctags,先進行ctags的安裝,安轉後在指定的源碼位置生成tags文件,例如ctags test.c再ls會存在tags文件,該文件存放了test.c的源代碼。
650) this.width=650;" title="ctags.png" alt="wKioL1dOVkTisLqJAAAuE1yJmPs622.png-wh_50" src="http://s4.51cto.com/wyfs02/M00/82/32/wKioL1dOVkTisLqJAAAuE1yJmPs622.png-wh_500x0-wm_3-wmp_4-s_3606189648.png" />
650) this.width=650;" title="makefile.png" alt="wKiom1dOVhLRDSKKAABqTRPq2p8555.png-wh_50" src="http://s3.51cto.com/wyfs02/M01/82/34/wKiom1dOVhLRDSKKAABqTRPq2p8555.png-wh_500x0-wm_3-wmp_4-s_1150183804.png" />
我們查看tags內容就可以發現,原來tags就是linux內核代碼中各個元素的索引,這也就是ctags結合vim可以快速進行定位的原因了(查詢就是通過這個文件內容來定位的)。
》》》cat 文件名
cat主要有三大功能:
1.一次顯示整個文件。$ cat filename
2.從鍵盤創建一個文件。$ cat > filename
只能創建新文件,不能編輯已有文件.
3.將幾個文件合並為一個文件: $cat file1 file2 > file
例如:cat test.c 顯示test.c代碼
650) this.width=650;" title="makefile.png" alt="wKioL1dOV0-R1KjIAAAsHzqKV38578.png-wh_50" src="http://s5.51cto.com/wyfs02/M02/82/32/wKioL1dOV0-R1KjIAAAsHzqKV38578.png-wh_500x0-wm_3-wmp_4-s_3235097182.png" />
本文出自 “Scen” 博客,請務必保留此出處http://10741357.blog.51cto.com/10731357/1785098
Copyright © Linux教程網 All Rights Reserved