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