小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

GNU make中文手冊(cè)-第一章:概述

 todaytomo 2006-12-30
GNU make中文手冊(cè)-第一章:概述 作者: hew  發(fā)布日期: 2006-3-21    查看數(shù): 169   出自: http://www.
第一章:概述

1.1 make概述
Linux環(huán)境下的程序員如果不會(huì)使用GNU make來(lái)構(gòu)建和管理自己的工程,應(yīng)該不能算是一個(gè)合格的專業(yè)程序員,至少不能稱得上是Linux程序員。在Linux環(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è)(多個(gè))正確的Makefile。編譯整個(gè)工程你所要做的唯一的一件事就是在shell 提示符下輸入make命令。整個(gè)工程完全自動(dòng)編譯,極大提高了效率。

make是一個(gè)命令工具,它解釋Makefile中的指令(應(yīng)該說(shuō)是規(guī)則),Makefile中描述了工程中所有文件的編譯順序、規(guī)則。Makefile 有自己的書寫格式、關(guān)鍵字、函數(shù)。像C語(yǔ)言有自己的格式、關(guān)鍵字和函數(shù)一樣。而且在Makefile中可以使用shell所提供的任何命令來(lái)完成你想要的 工作。Makefile(在其它的系統(tǒng)上可能是另外的文件名)在絕大多數(shù)的IDE開發(fā)環(huán)境中都在使用,已經(jīng)成為一種工程的編譯方法。

目前,系統(tǒng)完整的介紹make工具和如何編寫Makefile的中文文檔比較少。我整理這個(gè)文檔就是希望能使眾多的Linux環(huán)境下的程序員能夠比較容易 的掌握和學(xué)會(huì)使用它。本文所要介紹的是GNU的make,采用Red Hat FC3(包括最新發(fā)布的GNU Linux系統(tǒng))所集成的GUN make工具。

本文后續(xù)所用到的所有例子都采用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í)
在開始我們關(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í)行程序。鏈接器不檢查函數(shù)所在的源文件,只檢查所有.o文件中的定義的符號(hào)。 將.o文件中使用的函數(shù)和其它.o或者庫(kù)文件中的相關(guān)符號(hào)進(jìn)行合并,最后生成一個(gè)可執(zhí)行的程序。“ld”是GNU的鏈接器。

靜態(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í)有編譯器按照一種特殊的方式生成。對(duì)象模塊的各個(gè)成員的地址(變量引用和函數(shù)調(diào)用)都是相對(duì)地址。因此在程序運(yùn)行時(shí),可動(dòng)態(tài)加載庫(kù)文件和執(zhí)行共享的模塊(多個(gè)程序可以共享使用庫(kù)中的某一個(gè)模塊)。

參考 info ld了解更加詳細(xì)的關(guān)于ld的說(shuō)明和用法。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多