女人被爽到高潮视频免cn费95,久久99精品久久久久久久不卡,内射人妻骚骚骚,久久精品一区二区三区四区啪啪 ,美女视频黄频a美女大全

  • 正文
    • make?—— 項目的關節(jié)
    • 更進一步
    • 結語
    • 參考資料
  • 相關推薦
申請入駐 產業(yè)圖譜

【LeafBuildTool】構建工具系列1:make

02/11 22:00
956
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

make?—— 項目的關節(jié)

一個中型或大型項目,通常由許多文件組成模塊,又由各個模塊組成整個系統(tǒng),將各個文件、模塊構建為系統(tǒng)的方式,一直是項目管理中的要點。make是一個傳統(tǒng)——但是流行的構建工具,Makefile是其定義規(guī)則的文件,其中定義的規(guī)則就像關節(jié),將項目中的各部分靈活而有序地組織在一起。

基本語法

Makefile的核心是規(guī)則,其由一系列規(guī)則組成,每個規(guī)則的基本語法如下:

target:?prerequisites
????recipe
  • target:目標,即要創(chuàng)建或更新的文件,也可以是一個偽目標(不對應實際文件,用于執(zhí)行特定操作)。
  • prerequisites:依賴項,是目標所依賴的文件或其他目標。當依賴項中的任何一個發(fā)生改變時,make會認為目標需要更新,并執(zhí)行對應的規(guī)則命令。
  • recipe:規(guī)則命令序列,是為了創(chuàng)建或更新目標而需要執(zhí)行的命令,必須以制表符(Tab)開頭。

除此之外,Makefile還有一些作為腳本必要且實用的功能,以下的實際案例將進一步說明。

C語言項目構建案例

CC?=?gcc
CFLAGS?=?-Wall?-g

all:?myprogram

myprogram:?main.o?utils.o
????$(CC)?$(CFLAGS)?-o?myprogram?main.o?utils.o

main.o:?main.c?utils.h
????$(CC)?$(CFLAGS)?-c?main.c

utils.o:?utils.c?utils.h
????$(CC)?$(CFLAGS)?-c?utils.c

clean:
????rm?-f?*.o?myprogram

以上Makefile編寫了5條規(guī)則。

1. all

make默認會執(zhí)行Makefile里首個規(guī)則的目標,此目標通常被稱作默認目標。一般而言,會把all作為默認目標,該目標依賴于項目中的其他主要目標,以此來確保所有必要的文件都能被構建。

make也可手動指定構建目標,如:

make?all
make?clean
make?main.o

2. myprogram

myprogram目標有2個依賴項main.outils.o,若依賴項已構建完畢,則會執(zhí)行recipe部分所定義的命令,將.o文件通過gcc鏈接為可執(zhí)行文件myprogram。

對于每個目標,make會檢查其依賴項是否存在或者是否有更新。若依賴項不存在,make會嘗試構建這些依賴項;若依賴項的修改時間比目標新,make會認為目標需要更新,進而執(zhí)行該目標對應的規(guī)則命令。

3. main.o

main.cutils.h文件有更新,則根據recipe定義的命令,通過gcc編譯生成main.o

4. utils.o

main.o。

5. clean

目標可以是文件,也可以是一個偽目標,偽目標可通過.PHONY聲明,確保即使存在同名文件,make也會執(zhí)行對應的規(guī)則。(案例中由于不存在與目標all/clean同名文件,故省略.PHONY聲明)

.PHONY:?all?clean

all:?myprogram
clean:
????rm?-f?*.o?myprogram

當執(zhí)行偽目標時,make會直接執(zhí)行該目標對應的規(guī)則命令,而不會檢查文件的修改時間.

更進一步

Makefile作為一種構建腳本,可以像shell那樣,在recipe中直接編寫命令,比如調用Python腳本。

CPython混合項目案例

假設項目中有一個C程序和一個Python腳本,C程序生成的數據會被Python腳本處理。

project/
├── main.c
├── process.py
└── Makefile
#?定義編譯器和編譯選項
CC?=?gcc
CFLAGS?=?-Wall?-g

#?定義目標
all:?data.txt?result.txt

#?編譯?C?程序并生成數據文件
data.txt:?main
????./main?>?data.txt

main:?main.c
????$(CC)?$(CFLAGS)?-o?main?main.c

#?使用?Python?腳本處理數據文件
result.txt:?data.txt?process.py
????python3?process.py?data.txt?>?result.txt

#?清理生成的文件
clean:
????rm?-f?main?data.txt?result.txt

結語

Makefile還有一些常用的高級語法,后續(xù)有機會我會再開一篇文章介紹。感興趣的朋友可以點贊支持哦~

參考資料

GNU make:?https://www.gnu.org/software/make/manual/make.html

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄