乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      GNU make中文手冊-第一章:概述

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

      1.1 make概述
      Linux環(huán)境下的程序員如果不會使用GNU make來構(gòu)建和管理自己的工程,應(yīng)該不能算是一個合格的專業(yè)程序員,至少不能稱得上是Linux程序員。在Linux環(huán)境下使用GNU 的make工具能夠比較容易的構(gòu)建一個屬于你自己的工程,整個工程的編譯只需要一個命令就可以完成編譯、連接以至于最后的執(zhí)行。不過這需要我們投入一些時(shí) 間去完成一個或者多個稱之為Makefile文件的編寫。此文件正是make正常工作的基礎(chǔ)。

      所要完成的Makefile文件描述了整個工程的編譯、連接等規(guī)則。其中包括:工程中的哪些源文件需要編譯以及如何編譯、需要創(chuàng)建那些庫文件以及如何創(chuàng)建 這些庫文件、如何最后產(chǎn)生我們想要得可執(zhí)行文件。盡管看起來可能是很復(fù)雜的事情,但是為工程編寫Makefile的好處是能夠使用一行命令來完成“自動化 編譯”,一旦提供一個(多個)正確的Makefile。編譯整個工程你所要做的唯一的一件事就是在shell 提示符下輸入make命令。整個工程完全自動編譯,極大提高了效率。

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

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

      本文后續(xù)所用到的所有例子都采用C語言書寫的源程序,因?yàn)樗悄壳白钇毡槭褂玫囊环N語言。當(dāng)然make工具不僅僅是用來管理C語言工程的,那些編譯器只要 能夠在shell下運(yùn)行的語言所構(gòu)建的工程都可以使用make工具來管理。而且也可以使用make工具來做一些其它的事。例如,有這樣的需求:當(dāng)我們修改 了某個或者某些文件后,需要能夠根據(jù)修改的文件來自動對相關(guān)文件進(jìn)行重建或者更新。那么應(yīng)該考慮使用GNU make工具。GNU make工具為我們實(shí)現(xiàn)這個目的提供了非常有利的支持。工程中根據(jù)源文件的修改情況來進(jìn)行代碼的編譯正是使用了make的這個特征。make執(zhí)行時(shí),根據(jù) Makefile的規(guī)則檢查文件的修改情況,決定是否執(zhí)行定義的動作(那些修改過的文件將會被重新編譯)。這是GNU make的執(zhí)行依據(jù)。



      1.2 準(zhǔn)備知識
      在開始我們關(guān)于make的討論之前,首先需要明確一些基本概念:

      編譯:把高級語言書寫的代碼轉(zhuǎn)換為機(jī)器可識別的機(jī)器指令。編譯高級語言后生成的指令雖然可被機(jī)器識別,但是還不能被執(zhí)行。編譯時(shí),編譯器檢查高級語言的語 法、函數(shù)與變量的聲明是否正確。只有所有的語法正確、相關(guān)變量定義正確編譯器就可以編譯出中間目標(biāo)文件。通常,一個高級語言的源文件都可對應(yīng)一個目標(biāo)文 件。目標(biāo)文件在Linux中默認(rèn)后綴為“.o”(如“foo.c”的目標(biāo)文件為“foo.o”)。

      為了和規(guī)則的目標(biāo)文件相區(qū)別。本文將編譯高級語言后生成的目標(biāo)文件成為.o文件。

      鏈接:將多.o文件,或者.o文件和庫文件鏈接成為可被操作系統(tǒng)執(zhí)行的可執(zhí)行程序。鏈接器不檢查函數(shù)所在的源文件,只檢查所有.o文件中的定義的符號。 將.o文件中使用的函數(shù)和其它.o或者庫文件中的相關(guān)符號進(jìn)行合并,最后生成一個可執(zhí)行的程序。“ld”是GNU的鏈接器。

      靜態(tài)庫:又稱為文檔文件(Archive File)。它是多個.o文件的集合。Linux中靜態(tài)庫文件的后綴為“.a”。靜態(tài)庫中的各個成員(.o文件)沒有特殊的存在格式,僅僅是一個.o文件的集合。使用“ar”工具維護(hù)和管理靜態(tài)庫。

      共享庫:也是多個.o文件的集合,但是這些.o文件時(shí)有編譯器按照一種特殊的方式生成。對象模塊的各個成員的地址(變量引用和函數(shù)調(diào)用)都是相對地址。因此在程序運(yùn)行時(shí),可動態(tài)加載庫文件和執(zhí)行共享的模塊(多個程序可以共享使用庫中的某一個模塊)。

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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多