資料介紹
gun make教程.rar
關(guān)于本書
本文瑾獻(xiàn)給所有熱愛(ài)Linux的程序員!本中文文檔版權(quán)所有。
本文比較完整的講述GNU make工具,涵蓋GNU make的用法、語(yǔ)法。同時(shí)重點(diǎn)討論如何為一個(gè)工程編寫Makefile。作為一個(gè)Linux程序員,make工具的使用以及編寫Makefile是必需的。系統(tǒng)、詳細(xì)講述make的中文資料比較少,出于對(duì)廣大中文Linuxer的支持,本人在工作之余,花了18個(gè)多月時(shí)間完成對(duì)“info make”的翻譯整理,完成這個(gè)中文版手冊(cè)。本書不是一個(gè)純粹的語(yǔ)言翻譯版本,其中對(duì)GNU make的一些語(yǔ)法和用法根據(jù)我個(gè)人的工作經(jīng)驗(yàn)進(jìn)行了一些詳細(xì)分析和說(shuō)明,也加入了一些個(gè)人的觀點(diǎn)和實(shí)踐總結(jié)。本書的所有的例子都可以在支持V3.8版本的GNU make的系統(tǒng)中正確執(zhí)行。
由于個(gè)人水平限制,本文在一些地方存在描述不準(zhǔn)確之處。懇請(qǐng)大家在閱讀過(guò)程中,提出您寶貴的意見(jiàn),也是對(duì)我個(gè)人的幫助。我的個(gè)人電子郵箱地址:xhbdahai@126.com。非常愿意和大家交流!共同學(xué)習(xí)。
閱讀本書之前,讀者應(yīng)該對(duì)GNU的工具鏈和Linux的一些常用編程工具有一定的了解。諸如:gcc、as、ar、ld、yacc等;同時(shí)在書寫Makefile時(shí),需要能夠進(jìn)行一些基本的shell編程。這些工具是維護(hù)一個(gè)工程的基礎(chǔ)。如果大家對(duì)這些工具的用法不是很熟悉,可參考項(xiàng)目資料。
閱讀本文的幾點(diǎn)建議:
1.??????? 如果之前你對(duì)GNU make沒(méi)有了解、當(dāng)前也不想深入的學(xué)習(xí)GNU make的讀者??芍婚喿x本文各章節(jié)前半部分的內(nèi)容(作為各章節(jié)的基礎(chǔ)知識(shí))。
2.??????? 如果你已經(jīng)對(duì)GNU make比較熟悉,你更需要關(guān)心此版本的新增特點(diǎn)、功能、和之前版本不兼容之處;也可以作為開(kāi)發(fā)過(guò)程過(guò)程的參考手冊(cè)。
3.??????? 之前你對(duì)GNU make沒(méi)有概念、或者剛開(kāi)始接觸,本身又想成為一個(gè)Linux下的專業(yè)程序員,那么建議:完整學(xué)習(xí)本文的各個(gè)章節(jié),包括了基礎(chǔ)知識(shí)和高級(jí)用法、技巧。它會(huì)為你在Linux下的工程開(kāi)發(fā)、工程管理提供非常有用的幫助。
make概述
Linux環(huán)境下的程序員如果不會(huì)使用GNU make來(lái)構(gòu)建和管理自己的工程,應(yīng)該不能算是一個(gè)合格的專業(yè)程序員,至少不能稱得上是Unix程序員。在Linux(unix)環(huán)境下使用GNU 的make工具能夠比較容易的構(gòu)建一個(gè)屬于你自己的工程,整個(gè)工程的編譯只需要一個(gè)命令就可以完成編譯、連接以至于最后的執(zhí)行。不過(guò)這需要我們投入一些時(shí)間去完成一個(gè)或者多個(gè)稱之為Makefile文件的編寫。此文件正是make正常工作的基礎(chǔ)。
所要完成的Makefile文件描述了整個(gè)工程的編譯、連接等規(guī)則。其中包括:工程中的哪些源文件需要編譯以及如何編譯、需要?jiǎng)?chuàng)建那些庫(kù)文件以及如何創(chuàng)建這些庫(kù)文件、如何最后產(chǎn)生我們想要得可執(zhí)行文件。盡管看起來(lái)可能是很復(fù)雜的事情,但是為工程編寫Makefile的好處是能夠使用一行命令來(lái)完成“自動(dòng)化編譯”,一旦提供一個(gè)(通常對(duì)于一個(gè)工程來(lái)說(shuō)會(huì)是多個(gè))正確的Makefile。編譯整個(gè)工程你所要做的唯一的一件事就是在shell 提示符下輸入make命令。整個(gè)工程完全自動(dòng)編譯,極大提高了效率。
make是一個(gè)命令工具,它解釋Makefile中的指令(應(yīng)該說(shuō)是規(guī)則)。在Makefile文件中描述了整個(gè)工程所有文件的編譯順序、編譯規(guī)則。Makefile有自己的書寫格式、關(guān)鍵字、函數(shù)。像C語(yǔ)言有自己的格式、關(guān)鍵字和函數(shù)一樣。而且在Makefile中可以使用系統(tǒng)shell所提供的任何命令來(lái)完成想要的工作。Makefile(在其它的系統(tǒng)上可能是另外的文件名)在絕大多數(shù)的IDE開(kāi)發(fā)環(huán)境中都在使用,已經(jīng)成為一種工程的編譯方法。
目前,系統(tǒng)完整的介紹make工具和如何編寫Makefile的中文文檔比較少。我整理這個(gè)文檔就是希望能使眾多的Linux環(huán)境下的程序員能夠比較容易的掌握和學(xué)會(huì)使用GNU make。本文所要介紹的是GNU的make,采用Red Hat FC3(包括最新發(fā)布的GNU Linux系統(tǒng))所集成的GUN make工具。
本文中所有示例均采用C語(yǔ)言的源程序,因?yàn)樗悄壳白钇毡槭褂玫囊环N語(yǔ)言。當(dāng)然make工具不僅僅是用來(lái)管理C語(yǔ)言工程的,那些編譯器只要能夠在shell下運(yùn)行的語(yǔ)言所構(gòu)建的工程都可以使用make工具來(lái)管理。Make工作不僅僅可以用來(lái)編譯源代碼,它也可以完成一些其它的功能。例如,有這樣的需求:當(dāng)我們修改了某個(gè)或者某些文件后,需要能夠根據(jù)修改的文件來(lái)自動(dòng)對(duì)相關(guān)文件進(jìn)行重建或者更新。那么應(yīng)該考慮使用GNU make工具。GNU make工具為我們實(shí)現(xiàn)這個(gè)目的提供了非常有利的支持。工程中根據(jù)源文件的修改情況來(lái)進(jìn)行代碼的編譯正是使用了make的這個(gè)特征。make執(zhí)行時(shí),根據(jù)Makefile的規(guī)則檢查文件的修改情況,決定是否執(zhí)行定義的動(dòng)作(那些修改過(guò)的文件將會(huì)被重新編譯)。這是GNU make的執(zhí)行依據(jù)。
1.2 準(zhǔn)備知識(shí)
在開(kāi)始我們關(guān)于make的討論之前,首先需要明確一些基本概念:
編譯:把高級(jí)語(yǔ)言書寫的代碼轉(zhuǎn)換為機(jī)器可識(shí)別的機(jī)器指令。編譯高級(jí)語(yǔ)言后生成的指令雖然可被機(jī)器識(shí)別,但是還不能被執(zhí)行。編譯時(shí),編譯器檢查高級(jí)語(yǔ)言的語(yǔ)法、函數(shù)與變量的聲明是否正確。只有所有的語(yǔ)法正確、相關(guān)變量定義正確編譯器就可以編譯出中間目標(biāo)文件。通常,一個(gè)高級(jí)語(yǔ)言的源文件都可對(duì)應(yīng)一個(gè)目標(biāo)文件。目標(biāo)文件在Linux中默認(rèn)后綴為“.o”(如“foo.c”的目標(biāo)文件為“foo.o”)。
為了和規(guī)則的目標(biāo)文件相區(qū)別。本文將編譯高級(jí)語(yǔ)言后生成的目標(biāo)文件成為.o文件。
鏈接:將多.o文件,或者.o文件和庫(kù)文件鏈接成為可被操作系統(tǒng)執(zhí)行的可執(zhí)行程序(Linux環(huán)境下,可執(zhí)行文件的格式為“ELF”格式)。鏈接器不檢查函數(shù)所在的源文件,只檢查所有.o文件中的定義的符號(hào)。將.o文件中使用的函數(shù)和其它.o或者庫(kù)文件中的相關(guān)符號(hào)進(jìn)行合并,對(duì)所有文件中的符號(hào)進(jìn)行重新安排(重定位),并鏈接系統(tǒng)相關(guān)文件(程序啟動(dòng)文件等)最終生成可執(zhí)行程序。鏈接過(guò)程使用GNU 的“l(fā)d”工具。
靜態(tài)庫(kù):又稱為文檔文件(Archive File)。它是多個(gè).o文件的集合。Linux中靜態(tài)庫(kù)文件的后綴為“.a”。靜態(tài)庫(kù)中的各個(gè)成員(.o文件)沒(méi)有特殊的存在格式,僅僅是一個(gè).o文件的集合。使用“ar”工具維護(hù)和管理靜態(tài)庫(kù)。
共享庫(kù):也是多個(gè).o文件的集合,但是這些.o文件時(shí)有編譯器按照一種特殊的方式生成(Linux中,共享庫(kù)文件格式通常為“ELF”格式。共享庫(kù)已經(jīng)具備了可執(zhí)行條件)。模塊中各個(gè)成員的地址(變量引用和函數(shù)調(diào)用)都是相對(duì)地址。使用此共享庫(kù)的程序在運(yùn)行時(shí),共享庫(kù)被動(dòng)態(tài)加載到內(nèi)存并和主程序在內(nèi)存中進(jìn)行連接。多個(gè)可執(zhí)行程序可共享庫(kù)文件的代碼段(多個(gè)程序可以共享的使用庫(kù)中的某一個(gè)模塊,共享代碼,不共享數(shù)據(jù))。另外共享庫(kù)的成員對(duì)象可被執(zhí)行(由libdl.so提供支持)。
參考 info ld了解更加詳細(xì)的關(guān)于ld的說(shuō)明和用法。?
- GNU make中文手冊(cè) 0次下載
- 嵌入式Linux應(yīng)用開(kāi)發(fā)三大部分相關(guān)資料
- WINDOWS系統(tǒng)下使用GCC+MAKE開(kāi)發(fā)MCU
- Openwrt通用固件 make menuconfig配置教程 5次下載
- Gun Camera - World War II Photography from Allied
- GNU_Make_中文手冊(cè)下載 12次下載
- GNU_make中文手冊(cè) 0次下載
- GNU-make中文手冊(cè) 0次下載
- GNU_make中文手冊(cè) 0次下載
- gnu make 中文手冊(cè) 2次下載
- C2make手冊(cè) 6次下載
- Expedition User Wins Top Gun C 0次下載
- gnu make使用手冊(cè) 0次下載
- GNU make中文手冊(cè) (pdf版下載) 0次下載
- Make Precise Base-Station Powe
- HighTec Tricore編譯速度優(yōu)化策略探討 2252次閱讀
- 請(qǐng)問(wèn)一下CMake和Make之間的區(qū)別有哪些? 1820次閱讀
- make、make all和make clean的使用方法 2023次閱讀
- 基于小安派Eyes-S1開(kāi)發(fā)板新建工程并燒錄調(diào)試 652次閱讀
- Linux 下的make 工具和 Makefile 1208次閱讀
- Buildroot什么時(shí)候需要完全重新構(gòu)建規(guī)則 1520次閱讀
- 寬禁帶器件和仿真環(huán)境介紹 1582次閱讀
- 在貼片加工廠中有哪些安全防護(hù)需要了解 1408次閱讀
- 復(fù)合放大器實(shí)現(xiàn)高精度的高輸出驅(qū)動(dòng)能力 獲得最佳的性能 1712次閱讀
- 用降壓型穩(wěn)壓器或線性穩(wěn)壓器電源時(shí)值來(lái)會(huì)為負(fù)載供電 1058次閱讀
- 鋰電池并聯(lián)充電時(shí)保護(hù)板均衡原理 3.2w次閱讀
- Linux關(guān)于Makefile的用法介紹 1893次閱讀
- 更小更智能的電機(jī)控制器推進(jìn)HEV/EV市場(chǎng) 1182次閱讀
- Linux程序的編寫、編譯、調(diào)試方法及make 5732次閱讀
- PowerPC平臺(tái)Linux的移植(三) 746次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費(fèi)下載
- 0.00 MB | 1490次下載 | 免費(fèi)
- 2單片機(jī)典型實(shí)例介紹
- 18.19 MB | 92次下載 | 1 積分
- 3S7-200PLC編程實(shí)例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識(shí)別和講解說(shuō)明
- 4.28 MB | 18次下載 | 4 積分
- 5開(kāi)關(guān)電源原理及各功能電路詳解
- 0.38 MB | 10次下載 | 免費(fèi)
- 6基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
- 0.11 MB | 4次下載 | 免費(fèi)
- 7藍(lán)牙設(shè)備在嵌入式領(lǐng)域的廣泛應(yīng)用
- 0.63 MB | 3次下載 | 免費(fèi)
- 89天練會(huì)電子電路識(shí)圖
- 5.91 MB | 3次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費(fèi)
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費(fèi)
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費(fèi)
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費(fèi)
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費(fèi)
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費(fèi)
- 8開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21539次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537791次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191183次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183277次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138039次下載 | 免費(fèi)
評(píng)論