摘要:也可以是某個(gè)操作的名字標(biāo)簽,稱為偽目標(biāo)前置條件,這一項(xiàng)是可選參數(shù)。明明只是執(zhí)行命令,為什么會(huì)打印到標(biāo)準(zhǔn)輸出上了原因默認(rèn)會(huì)打印每條命令,再執(zhí)行。
Golang Gin實(shí)踐 番外 請(qǐng)入門 Makefile
原文地址:Golang Gin實(shí)踐 番外 請(qǐng)入門 Makefile
前言含一定復(fù)雜度的軟件工程,基本上都是先編譯 A,再依賴 B,再編譯 C...,最后才執(zhí)行構(gòu)建
如果每次都人為編排,又或是每新來(lái)一個(gè)同事就問(wèn)你項(xiàng)目 D 怎么構(gòu)建、重新構(gòu)建需要注意什么...等等情況,豈不是要崩潰?
我們常常會(huì)在開(kāi)源項(xiàng)目中發(fā)現(xiàn) Makefile,你是否有過(guò)疑問(wèn)?
本章節(jié)會(huì)簡(jiǎn)單介紹 Makefile 的使用方式,最后建議深入學(xué)習(xí)
怎么解決對(duì)于構(gòu)建編排,Docker 有 Dockerfile ,在 Unix 中有神器 Make ....
Make 是什么Make 是一個(gè)構(gòu)建自動(dòng)化工具,會(huì)在當(dāng)前目錄下尋找 Makefile 或 makefile 文件。如果存在,會(huì)依據(jù) Makefile 的構(gòu)建規(guī)則去完成構(gòu)建
當(dāng)然了,實(shí)際上 Makefile 內(nèi)都是你根據(jù) make 語(yǔ)法規(guī)則,自己編寫(xiě)的特定 Shell 命令等
它是一個(gè)工具,規(guī)則也很簡(jiǎn)單。在支持的范圍內(nèi),編譯 A, 依賴 B,再編譯 C,完全沒(méi)問(wèn)題
規(guī)則Makefile 由多條規(guī)則組成,每條規(guī)則都以一個(gè) target(目標(biāo))開(kāi)頭,后跟一個(gè) : 冒號(hào),冒號(hào)后是這一個(gè)目標(biāo)的 prerequisites(前置條件)
緊接著新的一行,必須以一個(gè) tab 作為開(kāi)頭,后面跟隨 command(命令),也就是你希望這一個(gè) target 所執(zhí)行的構(gòu)建命令
[target] ... : [prerequisites] ...[command] ... ...
target:一個(gè)目標(biāo)代表一條規(guī)則,可以是一個(gè)或多個(gè)文件名。也可以是某個(gè)操作的名字(標(biāo)簽),稱為偽目標(biāo)(phony)
prerequisites:前置條件,這一項(xiàng)是可選參數(shù)。通常是多個(gè)文件名、偽目標(biāo)。它的作用是 target 是否需要重新構(gòu)建的標(biāo)準(zhǔn),如果前置條件不存在或有過(guò)更新(文件的最后一次修改時(shí)間)則認(rèn)為 target 需要重新構(gòu)建
command:構(gòu)建這一個(gè) target 的具體命令集
簡(jiǎn)單的例子本文將以 go-gin-example 去編寫(xiě) Makefile 文件,請(qǐng)跨入 make 的大門
分析在編寫(xiě) Makefile 前,需要先分析構(gòu)建先后順序、依賴項(xiàng),需要解決的問(wèn)題等
編寫(xiě).PHONY: build clean tool lint help all: build build: go build -v . tool: go tool vet . |& grep -v vendor; true gofmt -w . lint: golint ./... clean: rm -rf go-gin-example go clean -i . help: @echo "make: compile packages and dependencies" @echo "make tool: run specified go tool" @echo "make lint: golint ./..." @echo "make clean: remove object files and cached files"
1、在上述文件中,使用了 .PHONY,其作用是聲明 build / clean / tool / lint / help 為偽目標(biāo),聲明為偽目標(biāo)會(huì)怎么樣呢?
聲明為偽目標(biāo)后:在執(zhí)行對(duì)應(yīng)的命令時(shí),make 就不會(huì)去檢查是否存在 build / clean / tool / lint / help 其對(duì)應(yīng)的文件,而是每次都會(huì)運(yùn)行標(biāo)簽對(duì)應(yīng)的命令
若不聲明:恰好存在對(duì)應(yīng)的文件,則 make 將會(huì)認(rèn)為 xx 文件已存在,沒(méi)有重新構(gòu)建的必要了
2、這塊比較簡(jiǎn)單,在命令行執(zhí)行即可看見(jiàn)效果,實(shí)現(xiàn)了以下功能:
make: make 就是 make all
make build: 編譯當(dāng)前項(xiàng)目的包和依賴項(xiàng)
make tool: 運(yùn)行指定的 Go 工具集
make lint: golint 一下
make clean: 刪除對(duì)象文件和緩存文件
make help: help
為什么會(huì)打印執(zhí)行的命令如果你實(shí)際操作過(guò),可能會(huì)有疑問(wèn)。明明只是執(zhí)行命令,為什么會(huì)打印到標(biāo)準(zhǔn)輸出上了?
make 默認(rèn)會(huì)打印每條命令,再執(zhí)行。這個(gè)行為被定義為回聲
可以在對(duì)應(yīng)命令前加上 @,可指定該命令不被打印到標(biāo)準(zhǔn)輸出上
build: @go build -v .
那么還有其他的特殊符號(hào)嗎?有的,請(qǐng)課后去了解下 +、- 的用途
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/29324.html
摘要:交叉編譯項(xiàng)目地址快上車,支持一波原文地址前言在連載九講解構(gòu)建鏡像時(shí),我們編譯可執(zhí)行文件用了另外一個(gè)形式的命令,不知道你有沒(méi)有疑問(wèn)說(shuō)明我們將講解命令各個(gè)參數(shù)的作用,希望你在閱讀時(shí),將每一項(xiàng)串聯(lián)起來(lái),你會(huì)發(fā)現(xiàn)這就是交叉編譯相關(guān)的小知識(shí) Golang交叉編譯 項(xiàng)目地址:https://github.com/EDDYCJY/go... (快上車,支持一波) 原文地址:https://segme...
摘要:交叉編譯項(xiàng)目地址快上車,支持一波原文地址前言在連載九講解構(gòu)建鏡像時(shí),我們編譯可執(zhí)行文件用了另外一個(gè)形式的命令,不知道你有沒(méi)有疑問(wèn)說(shuō)明我們將講解命令各個(gè)參數(shù)的作用,希望你在閱讀時(shí),將每一項(xiàng)串聯(lián)起來(lái),你會(huì)發(fā)現(xiàn)這就是交叉編譯相關(guān)的小知識(shí) Golang交叉編譯 項(xiàng)目地址:https://github.com/EDDYCJY/go... (快上車,支持一波) 原文地址:https://segme...
摘要:將應(yīng)用部署到項(xiàng)目地址快上車,支持一波原文地址注開(kāi)始前你需要安裝好,配好鏡像源本章節(jié)源碼在分支上從本章節(jié)開(kāi)始項(xiàng)目目錄都以為基準(zhǔn)請(qǐng)配合自己本地項(xiàng)目靈活變動(dòng)介紹在這里簡(jiǎn)單介紹下,建議深入學(xué)習(xí)是一個(gè)開(kāi)源的輕量級(jí)容器技術(shù),讓開(kāi)發(fā)者可以打包他們 將Golang應(yīng)用部署到Docker 項(xiàng)目地址:https://github.com/EDDYCJY/go... (快上車,支持一波)原文地址:https...
閱讀 3772·2021-11-23 09:51
閱讀 4385·2021-11-15 11:37
閱讀 3522·2021-09-02 15:21
閱讀 2745·2021-09-01 10:31
閱讀 878·2021-08-31 14:19
閱讀 851·2021-08-11 11:20
閱讀 3307·2021-07-30 15:30
閱讀 1688·2019-08-30 15:54