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

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

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

【Makefile】簡(jiǎn)單介紹

_light ? 來(lái)源:_light ? 作者:_light ? 2022-11-18 10:22 ? 次閱讀

基本規(guī)則

makefile的規(guī)則,一般由以下組成

目標(biāo): 依賴列表
	命令列表

1、其中第一條規(guī)則中的”目標(biāo)“,將會(huì)成為終極目標(biāo)。我們最終目的,就是為了生成這個(gè)目標(biāo)的

2、每一個(gè)規(guī)則中的目標(biāo)。都可以是一個(gè)文件,也可以是一個(gè)標(biāo)簽

3、每一個(gè)規(guī)則中的目標(biāo),不一定要有依賴

目標(biāo):
	命令列表

此時(shí)的目標(biāo),我們成為”偽目標(biāo)“

4、每一個(gè)規(guī)則,也不一定有命令列表

案例

假設(shè)我們有三個(gè).c源文件,main.c、f1.c、f2.c

f1.c

#include "stdio.h"

void f1()

{

printf("This is f1
);

}

f2.c

#include "stdio.h"

void f2()

{

printf("This is f2
);

}

然后我們?cè)趍ain里面調(diào)用f1與f2這兩個(gè)函數(shù),接著編譯、運(yùn)行即可

下面我們編寫一下Makefile

target:main.c f1.c f2.c
	gcc f1.c f2.c main.c

輸入命令 make 即可完成編譯

如果不想打印出gcc f1.c f2.c main.c這條命令,可以在Makefile文件中的命令列表前加上一個(gè)@符號(hào)

變量

創(chuàng)建變量,與shell類似

number = '56',此時(shí),變量number的值就是56,

可以使用echo驗(yàn)證: echo &$number

其中這個(gè)符號(hào)$就是使用已聲明的變量

變量的三種賦值方式

第一種:'=' 稱為”延時(shí)展開(kāi)賦值“
	例如:
		temp = $number
		number = '56'
	此時(shí)你輸出'temp'等于56,所謂延時(shí)展開(kāi)賦值就是當(dāng)number成功賦值之后,再把number的值賦給temp
第二種:':='稱為”立即展開(kāi)賦值“
    例如:
		temp := $number
		number = '56'
	此時(shí)你輸出'temp'就為空
第三種:'?='稱為條件賦值
	例如:
		temp ?= $number
	假如在這之前沒(méi)有給變量temp賦過(guò)值,那么就會(huì)把number的值賦給temp,反之就不會(huì)把number的值賦給temp

特殊變量

$@: 當(dāng)前規(guī)則中的目標(biāo)

$^: 當(dāng)前規(guī)則中的所有依賴

$<: 當(dāng)前依賴中的第一個(gè)

$$: 當(dāng)前執(zhí)行的進(jìn)程的進(jìn)程編號(hào)

$*: 模式規(guī)則中的所有%匹配的部分

$?: 模式規(guī)則中所有比所在規(guī)則中的目標(biāo)更 新的文件組成的列表

下面借助變量?jī)?yōu)化一下上述案例的Makefile

SOURCE=main.c f1.c f2.c
target:$(SOURCE)
	gcc $^

模式規(guī)則

%.o: %.c
	gcc -c $<

%.c會(huì)匹配.c文件前面的部分,相當(dāng)于shell中的*.c

模式規(guī)則執(zhí)行時(shí),是一個(gè)循環(huán)取出的過(guò)程,每次取出一個(gè).c,調(diào)用命令生成對(duì)應(yīng)的.o

模式規(guī)則舉例

#strat
TARGET = a.out
SRCS = main.c

$(TARGET): $(SRCS:.c = .o)
	gcc $^ -o $@
#$(SRCS:.c=.o) 可以理解為目標(biāo)所依賴文件是由.c文件生成的.o文件

#模式規(guī)則
%.o: %.c
	gcc -c $<   #模式規(guī)則每次取出一個(gè),所以這里用$<

#end

寫Makefile系列的文章是做個(gè)筆記,為了以后方便復(fù)習(xí),里面應(yīng)該有許多BUG,等學(xué)一段時(shí)間后會(huì)繼續(xù)完善

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19145
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    linux系統(tǒng)中Makefile的使用方法

    的基礎(chǔ)用法講起,逐步深入到更高級(jí)的應(yīng)用,為你呈現(xiàn)一個(gè)全面而詳細(xì)的Makefile使用手冊(cè)。 第一:Makefile的基本結(jié)構(gòu) 一個(gè)最簡(jiǎn)單Makefile包含規(guī)則,規(guī)則由目標(biāo)(targ
    的頭像 發(fā)表于 05-11 08:49 ?484次閱讀

    關(guān)于Makefile自動(dòng)生成-autotools的使用

    Makefile并非日常任務(wù),但遇見(jiàn)需要構(gòu)建大型軟件項(xiàng)目時(shí),利用工具自動(dòng)生成Makefile就顯得尤為關(guān)鍵。接下來(lái),我們將重點(diǎn)介紹一款自動(dòng)化構(gòu)建工具——Autoto
    的頭像 發(fā)表于 07-25 15:50 ?1352次閱讀
    關(guān)于<b class='flag-5'>Makefile</b>自動(dòng)生成-autotools的使用

    怎樣去使用Makefile+VCS+Verdi做個(gè)簡(jiǎn)單的Test Bench?

    怎樣去使用Makefile+VCS+Verdi做個(gè)簡(jiǎn)單的Test Bench?有哪些操作步驟?
    發(fā)表于 06-18 06:28

    Makefile中文教程 -下載

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

    駕馭Makefile

    駕馭Makefile在網(wǎng)上你能找到很多關(guān)于Makefile的學(xué)習(xí)資料,但絕大部分給你的只是一個(gè)知識(shí)點(diǎn),與將Makefile運(yùn)用到項(xiàng)目中(尤其是大型項(xiàng)目)的差距非常的大。因?yàn)?,?b class='flag-5'>Makefile
    發(fā)表于 01-05 17:05 ?9次下載

    關(guān)于Linux 2.6內(nèi)核Makefile的分析

    介紹文章都是基于2.4內(nèi)核的,可以說(shuō)關(guān)于2.6內(nèi)核Makefile相關(guān)的文章鳳毛麟角,筆者抽時(shí)間完成了這篇分析文章,讓讀者迅速熟悉Linux最新Makefile體系,從而加深對(duì)內(nèi)核的理解,同時(shí)也希望能
    發(fā)表于 11-02 10:12 ?1次下載

    linux makefile教程

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

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

    Makefile的重要性 會(huì)不會(huì)寫makefile,從一個(gè)側(cè)面說(shuō)明了一個(gè)人是否具備完成大型工程的能力 makefile帶來(lái)的好處就是——“自動(dòng)化編譯”,一旦寫好,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)編譯,極大的提高了軟件
    發(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)下載

    Linux關(guān)于Makefile的用法介紹

    Make可以從一個(gè)名為Makefile的文件中獲得如何構(gòu)建程序的知識(shí),該文件列出了每個(gè)非源文件以及如何從其他文件計(jì)算它。當(dāng)你編寫一個(gè)程序時(shí),你應(yīng)該為它編寫一個(gè)Makefile文件,這樣就可以使用Make來(lái)編譯和安裝這個(gè)程序。
    發(fā)表于 12-24 10:36 ?1843次閱讀

    Makefile的項(xiàng)目模板免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Makefile的項(xiàng)目模板免費(fèi)下載 可根據(jù)項(xiàng)目名稱修改。
    發(fā)表于 06-12 08:00 ?11次下載
    <b class='flag-5'>Makefile</b>的項(xiàng)目模板免費(fèi)下載

    Linux內(nèi)核的Makefile、Kconfig和.config文件

    問(wèn)題都和Makefile、Kconfig、.config有關(guān),下面簡(jiǎn)單談?wù)?b class='flag-5'>Makefile、Kconfig和.config。希望對(duì)你有啟發(fā)。 三者的作用: 簡(jiǎn)單來(lái)說(shuō)就是去飯店點(diǎn)菜:Kc
    的頭像 發(fā)表于 11-12 17:31 ?2911次閱讀

    芯片設(shè)計(jì)中的Makefile簡(jiǎn)單教程

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

    嵌入式中的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)用

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

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

    Makefile】函數(shù)介紹

    Makefile 中調(diào)用函數(shù)的方法跟變量的使用類似,以“**()”或“**{}”符號(hào)包含函數(shù)。
    的頭像 發(fā)表于 11-18 10:23 ?880次閱讀