成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Golang Gin實(shí)踐 番外 請入門 Makefile

bigdevil_s / 884人閱讀

摘要:也可以是某個操作的名字標(biāo)簽,稱為偽目標(biāo)前置條件,這一項(xiàng)是可選參數(shù)。明明只是執(zhí)行命令,為什么會打印到標(biāo)準(zhǔn)輸出上了原因默認(rèn)會打印每條命令,再執(zhí)行。

Golang Gin實(shí)踐 番外 請入門 Makefile

原文地址:Golang Gin實(shí)踐 番外 請入門 Makefile

前言

含一定復(fù)雜度的軟件工程,基本上都是先編譯 A,再依賴 B,再編譯 C...,最后才執(zhí)行構(gòu)建

如果每次都人為編排,又或是每新來一個同事就問你項(xiàng)目 D 怎么構(gòu)建、重新構(gòu)建需要注意什么...等等情況,豈不是要崩潰?

我們常常會在開源項(xiàng)目中發(fā)現(xiàn) Makefile,你是否有過疑問?

本章節(jié)會簡單介紹 Makefile 的使用方式,最后建議深入學(xué)習(xí)

怎么解決

對于構(gòu)建編排,Docker 有 Dockerfile ,在 Unix 中有神器 Make ....

Make 是什么

Make 是一個構(gòu)建自動化工具,會在當(dāng)前目錄下尋找 Makefile 或 makefile 文件。如果存在,會依據(jù) Makefile 的構(gòu)建規(guī)則去完成構(gòu)建

當(dāng)然了,實(shí)際上 Makefile 內(nèi)都是你根據(jù) make 語法規(guī)則,自己編寫的特定 Shell 命令等

它是一個工具,規(guī)則也很簡單。在支持的范圍內(nèi),編譯 A, 依賴 B,再編譯 C,完全沒問題

規(guī)則

Makefile 由多條規(guī)則組成,每條規(guī)則都以一個 target(目標(biāo))開頭,后跟一個 : 冒號,冒號后是這一個目標(biāo)的 prerequisites(前置條件)

緊接著新的一行,必須以一個 tab 作為開頭,后面跟隨 command(命令),也就是你希望這一個 target 所執(zhí)行的構(gòu)建命令

[target] ... : [prerequisites] ...
[command]
    ...
    ...

target:一個目標(biāo)代表一條規(guī)則,可以是一個或多個文件名。也可以是某個操作的名字(標(biāo)簽),稱為偽目標(biāo)(phony)

prerequisites:前置條件,這一項(xiàng)是可選參數(shù)。通常是多個文件名、偽目標(biāo)。它的作用是 target 是否需要重新構(gòu)建的標(biāo)準(zhǔn),如果前置條件不存在或有過更新(文件的最后一次修改時間)則認(rèn)為 target 需要重新構(gòu)建

command:構(gòu)建這一個 target 的具體命令集

簡單的例子

本文將以 go-gin-example 去編寫 Makefile 文件,請跨入 make 的大門

分析

在編寫 Makefile 前,需要先分析構(gòu)建先后順序、依賴項(xiàng),需要解決的問題等

編寫
.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)會怎么樣呢?

聲明為偽目標(biāo)后:在執(zhí)行對應(yīng)的命令時,make 就不會去檢查是否存在 build / clean / tool / lint / help 其對應(yīng)的文件,而是每次都會運(yùn)行標(biāo)簽對應(yīng)的命令

若不聲明:恰好存在對應(yīng)的文件,則 make 將會認(rèn)為 xx 文件已存在,沒有重新構(gòu)建的必要了

2、這塊比較簡單,在命令行執(zhí)行即可看見效果,實(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: 刪除對象文件和緩存文件

make help: help

為什么會打印執(zhí)行的命令

如果你實(shí)際操作過,可能會有疑問。明明只是執(zhí)行命令,為什么會打印到標(biāo)準(zhǔn)輸出上了?

原因

make 默認(rèn)會打印每條命令,再執(zhí)行。這個行為被定義為回聲

解決

可以在對應(yīng)命令前加上 @,可指定該命令不被打印到標(biāo)準(zhǔn)輸出上

build:
    @go build -v .

那么還有其他的特殊符號嗎?有的,請課后去了解下 +、- 的用途

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29324.html

相關(guān)文章

  • Gin實(shí)踐 番外 Golang交叉編譯

    摘要:交叉編譯項(xiàng)目地址快上車,支持一波原文地址前言在連載九講解構(gòu)建鏡像時,我們編譯可執(zhí)行文件用了另外一個形式的命令,不知道你有沒有疑問說明我們將講解命令各個參數(shù)的作用,希望你在閱讀時,將每一項(xiàng)串聯(lián)起來,你會發(fā)現(xiàn)這就是交叉編譯相關(guān)的小知識 Golang交叉編譯 項(xiàng)目地址:https://github.com/EDDYCJY/go... (快上車,支持一波) 原文地址:https://segme...

    alighters 評論0 收藏0
  • Gin實(shí)踐 番外 Golang交叉編譯

    摘要:交叉編譯項(xiàng)目地址快上車,支持一波原文地址前言在連載九講解構(gòu)建鏡像時,我們編譯可執(zhí)行文件用了另外一個形式的命令,不知道你有沒有疑問說明我們將講解命令各個參數(shù)的作用,希望你在閱讀時,將每一項(xiàng)串聯(lián)起來,你會發(fā)現(xiàn)這就是交叉編譯相關(guān)的小知識 Golang交叉編譯 項(xiàng)目地址:https://github.com/EDDYCJY/go... (快上車,支持一波) 原文地址:https://segme...

    劉德剛 評論0 收藏0
  • Gin實(shí)踐 連載九 將Golang應(yīng)用部署到Docker

    摘要:將應(yīng)用部署到項(xiàng)目地址快上車,支持一波原文地址注開始前你需要安裝好,配好鏡像源本章節(jié)源碼在分支上從本章節(jié)開始項(xiàng)目目錄都以為基準(zhǔn)請配合自己本地項(xiàng)目靈活變動介紹在這里簡單介紹下,建議深入學(xué)習(xí)是一個開源的輕量級容器技術(shù),讓開發(fā)者可以打包他們 將Golang應(yīng)用部署到Docker 項(xiàng)目地址:https://github.com/EDDYCJY/go... (快上車,支持一波)原文地址:https...

    Half 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<