0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是makefile?為什么需要用makefile?

學(xué)益得智能硬件 ? 來(lái)源:學(xué)益得智能硬件 ? 2024-03-06 16:32 ? 次閱讀

什么是makefile?為什么需要用makefile?

正常編譯一個(gè)c文件,直接敲命令:

gcc hello.c -o hello
就行。

如果文件稍微多幾個(gè),gcc 里面多加幾個(gè)問(wèn)題也不大。

但是如果給你一個(gè)完整的項(xiàng)目工程,里面包含幾千甚至幾萬(wàn)個(gè)文件,而且又分成不同的文件夾,再去敲命令一個(gè)一個(gè)編譯,顯然有點(diǎn)不現(xiàn)實(shí)。

細(xì)心的同學(xué)會(huì)發(fā)現(xiàn),凡是這些工程項(xiàng)目,里面都會(huì)有個(gè)叫Makefile的文件,要么這個(gè)文件直接存在,要么可以通過(guò)某種方式生成。

Makefile就是工程管理器,里面指定了本項(xiàng)目的編譯規(guī)則。

先編譯哪些,再編譯哪些,要鏈接哪些庫(kù)等等。

簡(jiǎn)單的Makefile確實(shí)挺簡(jiǎn)單,但是復(fù)雜的Makefile也很復(fù)雜。

下面來(lái)寫(xiě)個(gè)簡(jiǎn)單的Makefile。 假設(shè)現(xiàn)在只有一個(gè)源文件 hello.c。
root@turbo:~# ls
hello.c
root@turbo:~#
打開(kāi)Makefile,先寫(xiě)目標(biāo)文件,就是最終要生成的二進(jìn)制,冒號(hào)后面寫(xiě)上依賴(lài)文件,就是通過(guò)哪個(gè)文件可以生成目標(biāo)文件。
hello:hello.c
另起一行,先敲一下tab鍵,然后寫(xiě)編譯的規(guī)則,就是我們平時(shí)敲的命令。
hello:hello.c
  gcc hello.c -o hello
執(zhí)行Makefile,只要敲make就行,然后就能順利編譯。
make
再把文件增加兩個(gè)。

Makefile中,目標(biāo)文件不變,依賴(lài)文件以及下面編譯規(guī)則都要增加兩個(gè)文件。

這樣確實(shí)麻煩了些。

Makefile里面也有變量一說(shuō),引用變量的時(shí)候,用 $ 符號(hào)。

有了變量,下次再增加什么文件,只要往后接就行。
Target=hello
Object=hello.cprint.c show.c
$(Target):$(Object)
  gcc $(Object) -o $(Target)
不過(guò)一般依賴(lài)文件也不寫(xiě)成 .c ,因?yàn)樽罱K的可執(zhí)行文件都是由匯編后的文件合成,也就是多個(gè) .o 文件經(jīng)過(guò)鏈接變成了可執(zhí)行文件,所以這里一般寫(xiě)成 .o 。
Target=hello
Object=hello.oprint.oshow.o
$(Target):$(Object)
  gcc $(Object) -o $(Target)
那 .o 文件又怎么來(lái),下面可以繼續(xù)寫(xiě)由 .c 生成 .o ,不過(guò)Makefile里面有隱含規(guī)則,所以這幾行可以不寫(xiě)。

make的時(shí)候,過(guò)程很清晰,先從.c 變成 .o 再把 .o 合成最終的可執(zhí)行文件。
root@turbo:~# make
cc    -c -o hello.o hello.c
cc    -c -o print.o print.c
cc    -c -o show.o show.c
gcc hello.o print.o show.o -o hello
root@turbo:~#



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    41654
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19185

原文標(biāo)題:如何寫(xiě)一個(gè)簡(jiǎn)單的Makefile

文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Makefile中文教程 -下載

    Makefile中文教程,免費(fèi)下載哦。
    發(fā)表于 03-25 08:57 ?67次下載

    教你寫(xiě)Makefile

    教你寫(xiě)Makefile 什么是makefile?或許很多Winodws的程序員都不知道這個(gè)東西,因?yàn)槟切¦indows的IDE都為你做了這個(gè)工作,但我覺(jué)得要作一個(gè)好的和professional的程序員,
    發(fā)表于 02-10 14:24 ?37次下載

    駕馭Makefile

    到項(xiàng)目中,需要的知識(shí)是線、甚至是面。這篇文章以helloworld作為開(kāi)篇,接著是simple項(xiàng)目、complicated項(xiàng)目以及huge項(xiàng)目,一步一步的引入了Makefile中的概念,以及告訴你做一個(gè)實(shí)
    發(fā)表于 01-05 17:05 ?9次下載

    跟我一起學(xué)makefile

    關(guān)于makefile學(xué)習(xí),深入了解嵌入式下makefile的編寫(xiě)
    發(fā)表于 05-23 18:21 ?0次下載

    駕馭makefile

    一本Makefile的經(jīng)典教程,深入淺出,易學(xué)易懂
    發(fā)表于 06-17 16:16 ?9次下載

    Linux內(nèi)核Makefile文件

    Makefile文件的詳細(xì)編寫(xiě)過(guò)程
    發(fā)表于 08-28 09:25 ?14次下載

    linux makefile教程

     什么是makefile?或許很多Winodws的程序員都不知道這個(gè)東西,因?yàn)槟切¦indows的IDE都為你做了這個(gè)工作,但我覺(jué)得要作一個(gè)好的和professional的程序員,makefile
    發(fā)表于 11-12 09:11 ?5328次閱讀

    makefile的基本語(yǔ)法

     在Makefile中,最重要的三個(gè)概念是:目標(biāo)(target)、依賴(lài)關(guān)系(dependency)和命令(command)。目標(biāo)是指要干什么,即運(yùn)行make后生成什么;依賴(lài)是指明目標(biāo)所依賴(lài)的其他目標(biāo);命令則告訴make如何生成目標(biāo),這三個(gè)概念是通過(guò)Makefile中的規(guī)則
    發(fā)表于 11-12 10:15 ?1.1w次閱讀

    windows平臺(tái)下makefile操作教程

    Makefile一個(gè)工程中的源文件不計(jì)其數(shù),其按類(lèi)型、功能、模塊分別放在若干個(gè)目錄中,makefile定義了一系列的規(guī)則來(lái)指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件
    發(fā)表于 11-24 17:14 ?1.2w次閱讀
    windows平臺(tái)下<b class='flag-5'>makefile</b>操作教程

    Makefile是什么?Makefile工作原理是怎樣的?Makefile經(jīng)典教程免費(fèi)下載

    Makefile的重要性 會(huì)不會(huì)寫(xiě)makefile,從一個(gè)側(cè)面說(shuō)明了一個(gè)人是否具備完成大型工程的能力 makefile帶來(lái)的好處就是——“自動(dòng)化編譯”,一旦寫(xiě)好,只需要一個(gè)make
    發(fā)表于 09-12 17:19 ?0次下載
    <b class='flag-5'>Makefile</b>是什么?<b class='flag-5'>Makefile</b>工作原理是怎樣的?<b class='flag-5'>Makefile</b>經(jīng)典教程免費(fèi)下載

    嵌入式中的Makefile應(yīng)用

    文章目錄一.Makefile 引入二. Makefile語(yǔ)法1.通配符2.假象目標(biāo)3.變量三.Makefile函數(shù)四.實(shí)例本文主要總結(jié)一下嵌入式開(kāi)發(fā)中的Makefile,一般項(xiàng)目中都
    發(fā)表于 11-03 17:06 ?11次下載
    嵌入式中的<b class='flag-5'>Makefile</b>應(yīng)用

    MakefileMakefile與shell命令的聯(lián)系

    博主最近在項(xiàng)目實(shí)踐過(guò)程中,需要深度定制項(xiàng)目的Makefile,其中有些復(fù)雜的流程必須得借助shell腳本才能高效地完成,為此博主特意深入學(xué)習(xí)了在Makefile種調(diào)用shell命令的方法。
    的頭像 發(fā)表于 07-11 09:06 ?3491次閱讀
    【<b class='flag-5'>Makefile</b>】<b class='flag-5'>Makefile</b>與shell命令的聯(lián)系

    Makefile】簡(jiǎn)單實(shí)用的Makefile模板來(lái)了

    【Linux + Makefile】簡(jiǎn)單實(shí)用的Makefile模板來(lái)了
    的頭像 發(fā)表于 08-31 12:46 ?1906次閱讀
    【<b class='flag-5'>Makefile</b>】簡(jiǎn)單實(shí)用的<b class='flag-5'>Makefile</b>模板來(lái)了

    什么是Makefile?

    如果您有多個(gè) c、c++ 和其他語(yǔ)言的文件,并且想通過(guò)終端命令編譯它們,我們?cè)撊绾尉幾g他們呢?為了解決這類(lèi)問(wèn)題,Makefile就出現(xiàn)了。
    的頭像 發(fā)表于 02-17 10:41 ?4583次閱讀
    什么是<b class='flag-5'>Makefile</b>?

    Makefile可以做什么?Makefile的基本格式

    Makefile可以根據(jù)指定的依賴(lài)規(guī)則和文件是否有修改來(lái)執(zhí)行命令。常用來(lái)編譯軟件源代碼,只需要重新編譯修改過(guò)的文件,使得編譯速度大大加快。
    的頭像 發(fā)表于 01-25 11:18 ?706次閱讀