付費下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
申嵌
培訓(xùn)講座—Exynos
4412基礎(chǔ)篇家園-開發(fā)板商城/主辦:承辦:協(xié)辦:申嵌信息科技家園家園-開發(fā)板商城廣州友善之臂計算機科技主講:賀工第六講內(nèi)容回顧GCC編譯方式GDB的使用家園-開發(fā)板商城
/第六講Make與Makefile主講:賀工家園-開發(fā)板商城
/預(yù)習(xí)檢查$make–f
文件,是什么文件?遵循Makefile語法的文件,也就是Makefile文件目標列表:關(guān)聯(lián)性列表,含義是什么?目標列表依賴于關(guān)聯(lián)性列表簡單變量的定義方式?變量名:=文本列舉一個make內(nèi)置變量的例子$@,$?等make
clean,clean常見的含義是什么?clean是虛目標,刪除make生成的文件4家園-開發(fā)板商城/本章目標了解Make實用程序的功能使用Makefile管理多模塊掌握Makefile的規(guī)則,變量掌握Makefile的虛目標規(guī)則應(yīng)用Makefile管理多個源文件的工程家園-開發(fā)板商城/本章結(jié)構(gòu)簡介Make和MakefileMakefile和Make
Rules多模塊
、依賴樹和makeMake實用程序默認規(guī)則make實用程序?qū)唵巫兞康闹С謨?nèi)建變量虛目標特殊目標一般性語法錯誤及其糾正措施命令行的使用和調(diào)試家園-開發(fā)板商城/1-1
多模塊實用的 都是擁有多個源文件這些源文件稱之為模塊多模塊多模塊優(yōu)點缺點較小的程序文件易于知道所有文件的依賴性只需編譯經(jīng)過修改的源文件,而不是編譯整個系統(tǒng)所有文件修改的時間戳支持信息隱藏必須鍵入很長 令行家園-開發(fā)板商城/2-1make一個差強人意的辦法使用s上述的缺點,導(dǎo)致了make的產(chǎn)生。$cat
build.scgcc
–c
prog1.c
prog2.c
prog3.cgcc
–o
prog
prog1.o
prog2.o
prog3.o家園-開發(fā)板商城/2-1
make,直至生成可make用來管理多模塊程序的編譯和執(zhí)行代碼。通過 一個說明文件---Makefile描述系統(tǒng)中各模塊的依賴關(guān)系各模塊的編譯規(guī)則make使用Makefile使重編譯的次數(shù)達到最小化Makefile描述的依賴關(guān)系說明各組件文件的時間戳(修改時間)Makefile
實質(zhì)上是一種 語言家園-開發(fā)板商城/2-1make語法make[選項][目標][宏定義]執(zhí)行執(zhí)行make命令時,只需在Makefile文件所在的
輸入make指令即可。家園-開發(fā)板商城/2-1make常用選項特性-d顯示調(diào)試信息-f<文件>指定從哪個文件中 依賴關(guān)系信息。默認文件是”Makefile”或“makefile”“-”表示從標準輸入-h顯示所有Makefile的help信息-n打印所有Makefile執(zhí)行命令,但事實上不執(zhí)行這些命令-s運行時不顯示任何信息家園-開發(fā)板商城/2-1Makefile目標列表:關(guān)聯(lián)性列表<Tab>命令列表也稱為先決條件家園-開發(fā)板商城/2-1Makefile注釋#連接符\關(guān)聯(lián)列表和命令列表中使用s
通配符?*與s
腳本的相同家園-開發(fā)板商城/2-1Makefilescanf(“%f”,&y實例源碼-power.c#include
<math.h>int
main(){ffllooaatt
xx,,yy;;nn””));;printf(“enteprintf(“x^y
is
%6.3f\n”,pow((d
uble)x,(double)y));rreettuurrnn
00;;}}a
TABrprintf(“x^y
irs
%6.3f\gnc”cy,:p”o)w;p(o(wer.c
-o
power
–lmy)$;$cat
Makefilepprriinnttff((““tthhee
ppr#oSgarmapm#leSammapkleetfaiklmeeakfeofriltexhe
power
programprintf(“enteran#dfoRrfermoemthmsebtedirnp:oweeraancpdhrogcroammdimsapnladyslixn^ey.s\tarr#ts
with
a
TABssccaannff((““%%ff””,,&&xnupmobweeRre:mpeomwberx.:c”);:each
command
line
starts
withg ower.c
-o
power–lmscanf(“%f”,&x)$;power:power.c制表符<Tab>家園-開發(fā)板商城/2-1Makefile當(dāng)目標文件比關(guān)聯(lián)文件更新更新關(guān)聯(lián)文件,對比$touch
power.c$makegower.c
–o
power
–lm僅僅只更新文件的修改時間為當(dāng)前時間目標文件存在,且比關(guān)聯(lián)文件更新重新編譯更新的關(guān)聯(lián)文件家園-開發(fā)板商城/2-2依賴樹把power.c分成兩個文件#cat
power.c#include
<stdio.h>double
compute(double
x,double
y);int
main(){}},嵌入式家園-開發(fā)板商城
/
#cat
compute.c##iinncclluuddee
<<mmaatthh..hh>>float
x,y;
ddoouubbllee
ccoommppuuttee((ddoouubbllee
xx,,ddoouubbllee
yy))pprriinntfft
((””TThhee
{program
takes
x
from
stdin
and
displays
x^y.
\\nn””));;pprriinnttff((””EEnntter
rreettuurrnn((ppooww((((ddoouubbllee))xxn,um(bdeorubxl:e)”y)););ssccaannff((””%%ff,(d}ouble)y));
pprriinnttff((””EEnn,t
&x)};
scanf(”%f,ter
number
y:”);printf(”x^,y
&y);return
0;
is:%6.3f\n”,
compute(x,y));2-2依賴樹power.ocompute.ogopower:power.o
compute.ogowweerr..oo
ccoommppuuttee..oo
--oo
ppoowweerr
--llmm家園-開發(fā)板商城/2-2依賴樹power.ocompute.opower:power.o
compute.ogg
oowweerr..oo
ccoommppuuttee..oo
--oo
ppoowweerr
--llmmpower.o:power.cpower.ccompute.cp—lm$makeggcccc
–c
powgecrc.cg-ccc
p-ocwepro.werc.cppuuteg.ccgccc-c-ccocmopmuptute.cggcccc
––cc
ccomgogcoowecro.mpoutceo.mpout-eo.poow-eor
p—owlemr樹點的處理是自底向上的,由葉結(jié)點的節(jié)點開始家園-開發(fā)板商城//em/http:/$cat
compute.c#include
<math.h>#include
”compute.h”ddoouubbllee
ccoommppuuttee((ddoouubbllee
xx,,ddoouubbllee
yy)){{rreettuurrnn((ppooww((((ddoouubbllee))
(double)y));-}開發(fā)板商城家);}園,2-2依賴樹進一步分成六個文件,建立依賴樹$cat
main.h//**DDeeccllaarraattiioonn
ooff
pprroommppttss
ttoo
uusseerrss
**//ccoonnsstt
cchhaarr
**PPRROOMMPPTTll==””EEnntteerr
tthhee
vvaalluuee
ooffxx::””ccoonnsstt
cchhaarr
**PPRROOMMPPTT22==””EEnntteerr
tthhee
vvaalluuee
ooff
yy::””$$ccaatt
iinnppuutt..cc#include
<stdio.h>#include
”input.h”double
input(const
char
*s){ffllooaatt
xx;;printf(”%s”,s);scanf(“%f”,&x);return(x);}$$ccaatt
iinnppuutt..hh/*
Declaration
of
the”input”function*/double
input(const
char*);$$
ccaatt
ccoommppuuttee..hh/*
Declaration
of
the“compute”function*/double
compute(double,double);2-2依賴樹$$ccaatt
mmaaiinn..cc
##iinncclluuddee
<<ssttddiioo..hh>>
##iinncclluuddee
””mmaaiinn..hh””
##iinncclluuddee
””ccoommppuuttee..hh””
#include
”input.h”iinntt
mmaaiinn(()){ddoouubbllee
xx,,yy;;printf(”The
program
takes
X
and
Y
from
stdin
anddisplays
x^y.\n”);xx==iinnppuutt((PPRROOMMPPTTll));;yy==iinnppuutt((PPRROOMMPPTT22));;pprriinnttff((””xx^^yy
iiss::%%66..33ff\\nn””,,ccoommppuuttee((xx,,yy))));;rreettuurrnn
00;;}}家園-開發(fā)板商城/2-2依賴樹oo::ggcccc
--cc
iinnppuutt..cc
ppuuttee..cc
ccoommppuuttee..hhgcc-ccompute.c$$$
mmaakkeegcc
-c
main.cggcccc
--cc
iinnppuutt..cc
gcc
-c
compute.cgcc
main.o
input.o
compute.o-o
power
-1m$$
ccaatt
MMaakkefefiilleepower:main.o
input.o
compute.ogcc
main.o
input.o
compute.o
-o
power
-1mmmaaiinn.oo::mmaaiinn..cc
mmaaiinn..hh
iinnppuutt..hh
ccoommppuutte..e
hhggcccc
--cc
mmaaiinn..ccinput.o:input.c
input.h家園-開發(fā)板商城/2-3默認模式規(guī)則%.o:%.s--利利用用默默認認的的規(guī)規(guī)則則修修改改后后的的MMaakkeeffiillee$cat
Makefile$(AS)$(ASFLAGS)
-o
$@
$<ppoowweerr:m:maaiinn..oo
iinnppuutt..oo
ccoommppuuteet
..oogcc
main.o
input.o
compute.o
-o
power
-lmmmaaiinn..oo:m:maaiinn..hh
iinnppuutt..hh
ccoommpputtu
ee.hh.
iinnpuup
tt.o::o.input.hccoommpputtu
ee.o:c:o.
coommpuup
tte..e
hh--默默認認的的模模式式規(guī)規(guī)則則((GGNNUU
MMaakkee
內(nèi)置變量,以后會經(jīng)常遇到%.o:%.c:$(CC)$(CFLAGS)-c
$<家園-開發(fā)板商城/2-4簡單變量簡單變量定義:變量名:=[文本]添加:變量名+=[文本]$(變量名)${變量名}$單字符變量C=gcc$CCC=gcc$(CC)見過其他的模式嗎?變量名=[文本]變量名?=[文本]超出了本章的范圍家園-開發(fā)板商城
/2-4簡單變量$cat
MakefileCC
:=
gccOPTIONS:=-O3OBJECTS:=main.oOBJECTS+=input.ocompute.oSOURCES:=main.c
input.c
compute.cHEADERS:=main.h
input.h
compute.hpower:$(OBJECTS)$(CC)
$(OPTIONS)
$(OBJECTS)
-o
power
-lmmain.o:main.h
input.h
compute.hinput.o:input.h
compute.o:compute.htar:Makefile
$(HEADERS)
$(SOURCES)tar
-cvf
power.tar
Makefile
$(HEADERS)
$(SOURCES)clean:rm
*.o$家園-開發(fā)板商城/2-5
內(nèi)置變量變量名意義$@當(dāng)前目標的名稱(代表目標列表)$?比當(dāng)前目標更新的已修改的依賴性列表(代表所有已修改的依賴文件)$<比當(dāng)前目標更新的已修改的當(dāng)前依賴性名稱(代表第一個依賴文件)$^用空格分開的所有依賴性列表家園-開發(fā)板商城/@echo
”Build
complete”ppoowweerr::$$((OOBBJJEECCTTSS))$$((CCCC))$$((OOPPTTIIOONNSS))--OO
$$@@
$$^^
--llmm@@eecchhoo
””TThhee
eexxeeccuuttaabbllee
iiss
iinn
tthhee
ppoowweerr
ffiillee..””2-5修改后的Makefileo:main.o:main.h
input.h
compute.hpute.hiinnppuutt..oo::iinnppuutt..hhppoowweerr..ttaarr::MMaakkeeffiillee
$$((HHEEAADDEERRSS))
$$((SSOOUURRCCEESS))
ttaarr
--ccvvff
$$@@
$$^^.PHONY:cleancclleeaan::nrrmm
--ff
**..oo
ppoowweerr家園-開發(fā)板商城ao.c虛目標2-6虛目標Makefile中有一些目標,它們是一些不存在的文件,而且也無需創(chuàng)建它們,這些目標成為虛目標。允許你強制執(zhí)行某些事件,而這些事件在正常規(guī)則中是不會發(fā)生的。虛目標總是使與之有關(guān) 令被執(zhí)行。比如:可以通過設(shè)置一個虛目標生成多個可執(zhí)行文件,如果不使用虛目標,make就只能建立第一個目標。家園-開發(fā)板商城/2-6虛目標常見虛目標列表目標意義all生成工程中所有可以執(zhí)行者,通常是Makefile的第一個生成目標clean刪除make
all生成的所有文件install在系統(tǒng) 中安裝工程項目生成的可執(zhí)行文件和文檔uninstall刪除make
install
安裝的所有文件家園-開發(fā)板商城/2-6虛目標家園....-開發(fā)板商城/$cat
MakefileIINNSSTTAALLLLDDIIRR==//hhoommee//eemmbbeeddcclluubb//bbiinniinnssttaallll::cclliieenntt
sseerrvveerrcp
–f
$^
$(INSTALLDIR)rrmm
––ff
**..oo
$$^^cd
$(INSTALLDIR);
od
755
$^uninstall:ccdd
$$((IINNSSTTAALLLLDDIIRR));;rrmm
cclliieenntt
sseerrvveerr
client:client.o
miscc.o
rcopyc.oggcccc
ccliil
eenntt.oo.
mmiisscccc..oo
rrccooppyycc..oo
––llnnssll
--oo
cclliieenntt
\\
client.o:client.c
netc.h
rcopy.hgcc
-c
client.c$$mmaakkee
iinnssttaallll.
.1.不存在的文件,僅為完成某些功能2現(xiàn).如什果么下?存在這個同名文件會出2-7特殊目標上述問題用.PHONY的特殊目標解決.PHONY:cleanclean:rm
–rf
*.o家園-開發(fā)板商城/2-8一般性語法錯誤錯誤一:缺少Tab鍵錯誤二:在連接符’\’和換行符之間 了空格$$mmaakkeeMMaakkeeffiillee::44::******mmiissssiinngg
sseeppaarraattoorr..SSttoopp$cat–t
Makefile//顯示Makefile中制表符為^I$cat–e
Makefile//將Makefile中的換行符顯示為$輸出$$ggrreepp
‘‘\\\\[[]]$$’’MMaakkeeffiillee
////顯顯示示MMaakkeeffiillee中中不不正正確確的的行行////注注意意[[]]中中間間指指定定幾幾個個空空格格,,那那么么就就只只能能查查到到對對應(yīng)應(yīng)的的錯錯誤誤,,即即\\與與換換行行符符中中
了了幾幾個個空空格格的的錯錯誤誤。。家園-開發(fā)板商城/2-9命令行的使用和調(diào)試使用非標準的Makefile名稱文件從標準輸入顯示Makefile中所執(zhí)行命令的順序$
make
-fprog1.makefile$make
-f
-$make
-n家園-開發(fā)板商城/2-10
制作工程文件的Makefile一般工程文件proc由以下部分組成:src:
main.c
fun1.c
fun2.c…include:
fun1.h
fun2.h…test/Makefile$$ccaatt
..//MMaakkeeffiilleeVVPPAATTHH
==
ssrrcc::iinncclluuddee
all:test4
tar.PHONY:alltest4:main.o
fun1.o
fun2.ogcc
main.o
fun1.o
fun2.o
-o
test4mmaaiinn..oo::mmaaiinn..ccgcc
-c
-Iinclude
-o
$@
$^fun1.o:fun2.o:tar:ttaarr
ccvvff
tteesstt44..ttaarr
ssrrcc
iinncclluuddee
MMaakkeeffiillee.PHONY:cleanclean:家園-開發(fā)板r商m城*.ortmes*t.4o2-10
制作工程文件的Makefile$cat
./src/main.c#include
<stdio.h>##iinncclluuddee
""....//iinncclluuddee//ffuunn11..hh""
##iinncclluudde
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年地質(zhì)災(zāi)害的監(jiān)測與評估技術(shù)進展
- 2026年納米復(fù)合材料的性質(zhì)測試
- 2025年營口事業(yè)單位考試筆試題及答案
- 2025年四川復(fù)核教資筆試及答案
- 2025年啟程教育長春事業(yè)編考試及答案
- 2026年建筑行業(yè)發(fā)展規(guī)劃與政策解析
- 2025年唐山市衛(wèi)生事業(yè)編考試及答案
- 2025年四川煙草商務(wù)系統(tǒng)筆試及答案
- 2025年甘肅煙草筆試及答案
- 2025年計算機事業(yè)編考試真題及答案
- (2025版)肥胖癥合并骨關(guān)節(jié)炎專家共識課件
- 民航招飛pat測試題目及答案
- 2型糖尿病臨床路徑標準實施方案
- 2026年鄭州鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性考試題庫及參考答案詳解
- DB35-T 2278-2025 醫(yī)療保障監(jiān)測統(tǒng)計指標規(guī)范
- 長沙股權(quán)激勵協(xié)議書
- 心源性腦卒中的防治課件
- 2025年浙江輔警協(xié)警招聘考試真題含答案詳解(新)
- 果園合伙經(jīng)營協(xié)議書
- 節(jié)能技術(shù)咨詢合同范本
- 物業(yè)管理經(jīng)理培訓(xùn)課件
評論
0/150
提交評論