精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

sanyue7758 ? 來源: ExASIC ? 2024-01-25 11:18 ? 次閱讀

Makefile可以做什么?

Makefile可以根據指定的依賴規則和文件是否有修改來執行命令。常用來編譯軟件源代碼,只需要重新編譯修改過的文件,使得編譯速度大大加快。

Makefile的基本格式

目標:依賴

命令

目標是要生成的結果,依賴是生成結果需要的源文件和上一步驟的結果,命令是當目標不存在或者依賴更新時執行的命令。注意命令前必須用tab來縮進,不可以用空格。

示例一:

simv: tb.sv dut.v

vcs -full64 -sverilog tb.sv dut.v

這個例子中,simv是目標,是我們要生成的仿真執行文件。tb.sv和dut.v是依賴,執行命令前會先檢查tb.sv和dut.v是否存在,以及是否有修改。當依賴文件有修改時,或者目標不存在時,則執行命令vcs -full64 -sverilog tb.sv dut.v來生成simv。

偽目標

有時候目標并不是真實要生成的文件,比如我們要用Makefile調用simv來仿真,并不存在一個叫做sim的目標文件,這種情況我們稱之為偽目標PHONY。

示例二:

sim: simv

./simv -xxx

這個例子中,sim并不是要生成的結果文件,而只是我們給操作起的一個名字。由于偽目標總是不存在,所以命令也一定會重新執行,即使simv沒有修改。

我們常常在Makefile的開頭來用.PHONY顯式指明偽目標。

示例三:

.PHONY: sim

sim: simv

./simv -xxx

這樣,我們在terminal里就可以用make sim來調用仿真命令。

默認目標

如果我們只是敲make(后面不跟目標),那么將調用Makefile里的第一個目標。那么我們為了防止出錯通常把第一個目標定義成all(執行完整的流程)或者help(顯示幫助菜單)。我更傾向于后者,可以幫助我們回憶如何使用Makefile腳本。

示例四:

.PHONY: help sim

help:

echo "make help"

echo "make simv to compile"

echo "make sim to run simulation"

simv: tb.sv dut.v

vcs -full64 -sverilog tb.sv dut.v

sim:

./simv -xxx

這樣,當我們不記得如何使用Makefile的時候,直接敲make就會有使用幫助菜單。另外,我們還可以看到,一個目標后面可以執行多條命令,比如這里的三條echo命令。

隱藏回顯

在執行命令前,make會先回顯命令(就是打印出命令)。上面的make help會輸出:

echo "make help"

make help

echo "make simv to compile"

make simv to compile

echo "make sim to run simulation"

make sim to run simulation

看起來有點重復了。在命令前加@可以關閉回顯示,這正是我們需要的。改進過的Makefile如示例五。

示例五:

.PHONY: help

help:

@echo "make help"

@echo "make simv to compile"

@echo "make sim to run simulation"

makefile內定義變量

當源文件比較多,且常需要增減,我們可以把依賴定義成一個變量,放成文件開頭,如下。

示例六:

tbfile := tb.sv env_pkg.sv test_pkg.sv

rtlfile := dut.v a.v b.v c.v

simv: $(tbfile) $(rtlfile)

vcs -full64 -sverilog $(tbfile) $(rtlfile)

當要增減文件時,只需要修改文件開頭即可。

調用shell命令

如果rtl文件太多,還可以在Makefile里調用shell命令來幫助生成。如下面的例子:

示例七:

tbfile := $(shell ls *.sv)

rtlfile := $(shell find rtl -name "*.v")

simv: $(tbfile) ($rtlfile)

vcs -full64 -sverilog $(tbfile) $(rtlfile)

例七中的tb和rtl文件寫兩遍,是不是有點麻煩。我們最好能簡化一下。在Makefile中有幾個特殊變量,如$@表示目標,$^表示依賴。所以示例七中的命令可以簡化成:

simv: $(tbfile) $(rtlfile)

vcs -full64 -sverilog $^

學到到這里你已經可以寫出大部分的Makefile腳本了。

為makefile增加選項

但我們還需要進一步學習兩個重要功能:選項和目錄遞歸。

我們常需要在仿真時提供一些選項,比如testcase名,是否是post仿真,是否要dump波形。那么怎么實現呢?其實Makefile允許從命令行提供額外的變量,格式為OPTION=value。如下面的例子,假設有三個選項,TC、POST、DUMP:

示例八:

ifeq ($(POST),1)

SRC := "netlist.v"

else

SRC := "rtl.v"

endif

ifeq ($(DUMP),1)

DUMP_DEF := "+define+DUMP"

else

DUMP_DEF := ""

endif

sim:

@echo "vcs -full64 -sverilog $(SRC) $(DUMP_DEF) +UVM_TESTNAME=$(TC)"

那么,使用時就可以通過命令行控制選項開關:

make sim TC=basic_test

make sim TC=basic_test POST=1

make sim TC=basic_test DUMP=1

make sim TC=basic_test POST=1 DUMP=1

makefile的大殺器:目錄遞歸

另一個重要功能是目錄遞歸,目錄遞歸有一個典型的應用:make clean。在頂層目錄里make clean時,將會自動調用子目錄的make clean。這個怎么實現呢?看下面的例子:

示例九:

./Makefile

clean:

rm -f *~

make -C a clean

make -C b clean

./a/Makefile

clean:

rm -f *~

./b/Makefile

clean:

rm -f *~

make -C c clean

./b/c/Makefile

clean:

rm -f *~

我們看到一個make -C subdir clean,就是說可以通過-C來把目標clean傳遞給子目錄,相當于在Makefile里調用了另一個Makefile。這樣在頂到make clean時,將自動遞歸到所有的子目錄。

Makefile的引用與復用

最后還有一點,我們也會經常遇到,把共用的Makefile腳本寫到common.mk,然后再include common.mk,這樣可以讓Makefile看起來更簡潔。

IC Flow的聯系

到這里,學了這么多,你已經可以寫一些復雜的Makefile了。但重在應用,在IC設計里,我們常常用Makefile串起多個工具,實現完整的流程。下面是一個啟發型的例子。

示例十:

.PHONY: help clean rtl lint sim syn lec pr pt lvs

help:

@echo "make help"

clean:

rm -rf *~ *.log *.fsdb csrc simv* ...

make -C xxx clean

rtl:

python3 ...

lint:

sg_shell/nLint ...

sim:

vcs/irun ...

syn:

dc_shell -64bit -topographical -f run_syn.tcl | tee log/syn.log

lec:

fm_shell/lec ...

pt:

pt_shell ...

pr:

innovus/icc ...

lvs:

calibre ...

習題:

根據自己公司的情況,把示例十補充完整。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 命令
    +關注

    關注

    5

    文章

    678

    瀏覽量

    21987
  • 編譯
    +關注

    關注

    0

    文章

    654

    瀏覽量

    32813
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    19163

原文標題:【手把手系列】:芯片設計中的Makefile簡明教程

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Makefile中文教程 -下載

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

    教你寫Makefile

    教你寫Makefile 什么是makefile?或許很多Winodws的程序員都不知道這個東西,因為那些Windows的IDE都為你做了這個工作,但我覺得要作一個好的和professional的程序員,
    發表于 02-10 14:24 ?37次下載

    駕馭Makefile

    駕馭Makefile在網上你能找到很多關于Makefile的學習資料,但絕大部分給你的只是一個知識點,與將Makefile運用到項目中(尤其是大型項目)的差距非常的大。因為,將Makefile
    發表于 01-05 17:05 ?9次下載

    Makefile教程

    Linux開發必備的Makefile文件編譯教本,講解的很到位,新手基本上看上幾天就可以上手了
    發表于 01-05 17:05 ?0次下載

    跟我一起學makefile

    關于makefile學習,深入了解嵌入式下makefile的編寫
    發表于 05-23 18:21 ?0次下載

    駕馭makefile

    一本Makefile的經典教程,深入淺出,易學易懂
    發表于 06-17 16:16 ?9次下載

    跟我一起寫makefile

    想了解Makefile可以看看
    發表于 03-04 18:39 ?0次下載

    Linux內核Makefile文件

    Makefile文件的詳細編寫過程
    發表于 08-28 09:25 ?14次下載

    linux makefile教程

     什么是makefile?或許很多Winodws的程序員都不知道這個東西,因為那些Windows的IDE都為你做了這個工作,但我覺得要作一個好的和professional的程序員,makefile
    發表于 11-12 09:11 ?5299次閱讀

    makefile的基本語法

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

    Makefile是什么?Makefile工作原理是怎樣的?Makefile經典教程免費下載

    Makefile的重要性 會不會寫makefile,從一個側面說明了一個人是否具備完成大型工程的能力 makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件
    發表于 09-12 17:19 ?0次下載
    <b class='flag-5'>Makefile</b>是什么?<b class='flag-5'>Makefile</b>工作原理是怎樣的?<b class='flag-5'>Makefile</b>經典教程免費下載

    嵌入式中的Makefile應用

    文章目錄一.Makefile 引入二. Makefile語法1.通配符2.假象目標3.變量三.Makefile函數四.實例本文主要總結一下嵌入式開發中的Makefile,一般項目中都需
    發表于 11-03 17:06 ?11次下載
    嵌入式中的<b class='flag-5'>Makefile</b>應用

    MakefileMakefile與shell命令的聯系

    博主最近在項目實踐過程中,需要深度定制項目的Makefile,其中有些復雜的流程必須得借助shell腳本才能高效地完成,為此博主特意深入學習了在Makefile種調用shell命令的方法。
    的頭像 發表于 07-11 09:06 ?3368次閱讀
    【<b class='flag-5'>Makefile</b>】<b class='flag-5'>Makefile</b>與shell命令的聯系

    Makefile】簡單實用的Makefile模板來了

    【Linux + Makefile】簡單實用的Makefile模板來了
    的頭像 發表于 08-31 12:46 ?1875次閱讀
    【<b class='flag-5'>Makefile</b>】簡單實用的<b class='flag-5'>Makefile</b>模板來了

    什么是Makefile

    如果您有多個 c、c++ 和其他語言的文件,并且想通過終端命令編譯它們,我們該如何編譯他們呢?為了解決這類問題,Makefile就出現了。
    的頭像 發表于 02-17 10:41 ?4467次閱讀
    什么是<b class='flag-5'>Makefile</b>?