欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go使用makefile腳本編譯應(yīng)用的方法小結(jié)

 更新時(shí)間:2022年08月01日 10:47:30   作者:CK持續(xù)成長  
makefile可以看作是make工具的腳本文件, 而make主要用來處理一系列命令。常用的比如用來編譯和打包文件, 在C/C++的編譯打包中應(yīng)用最廣泛了,這篇文章主要介紹了go使用makefile腳本編譯應(yīng)用,需要的朋友可以參考下

1. go介紹

Go官方 提供一個(gè)名為go的命令,該命令可以用來下載go的依賴,構(gòu)建安裝go應(yīng)用,運(yùn)行和測試 Go程序等等, 我們比較常用的比如go get, go mod, go run , go test等等。

但是,我們在 Go 項(xiàng)目中為了簡化使用 go 命令的復(fù)雜性,規(guī)范團(tuán)隊(duì)使用 go 命令的方式,提升個(gè)人或團(tuán)隊(duì)的生產(chǎn)力,我們會(huì)使用makefile腳本,使用make來處理一些任務(wù)。

2. make及makefile

makefile可以看作是make工具的腳本文件, 而make主要用來處理一系列命令。常用的比如用來編譯和打包文件, 在C/C++的編譯打包中應(yīng)用最廣泛了。

makefile文件結(jié)構(gòu)其實(shí)也比較簡單:

target ... : prerequisites ...
    command
    ...
    ...

target

可以是一個(gè)object file(目標(biāo)文件),也可以是一個(gè)執(zhí)行文件,還可以是一個(gè)標(biāo)簽(label)。對于標(biāo)簽這種特性,在后續(xù)的“偽目標(biāo)”章節(jié)中會(huì)有敘述。

prerequisites

生成該target所依賴的文件和/或target

command

該target要執(zhí)行的命令(任意的shell命令)

makefile文件主要定義了執(zhí)行目標(biāo)應(yīng)用, 它依賴哪些文件或者目標(biāo), 以及當(dāng)前目標(biāo)需要執(zhí)行的command指令。有依賴項(xiàng),他會(huì)先去執(zhí)行依賴項(xiàng)的command。

具體的學(xué)習(xí)可以參考:makefile介紹 — 跟我一起寫Makefile 1.0 文檔

3. 使用makefile編譯打包go應(yīng)用

這里我們使用makefile來簡單實(shí)現(xiàn)一個(gè)將go應(yīng)用變異打包為不同系統(tǒng)的應(yīng)用的示例:

.PHONY: all run clean help
 
APP = task
 
## linux: 編譯打包linux
.PHONY: linux
linux:
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build $(RACE) -o ./bin/${APP}-linux64 ./main.go
 
## win: 編譯打包win
.PHONY: win
win:
	CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build $(RACE) -o ./bin/${APP}-win64.exe ./main.go
 
## mac: 編譯打包mac
.PHONY: mac
mac:
	CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build $(RACE) -o ./bin/${APP}-darwin64 ./main.go
 
build:
	@go build -o ${APP}
 
## 編譯win,linux,mac平臺(tái)
.PHONY: all
all:win linux mac
 
run:
	@go run ./
 
.PHONY: tidy
tidy:
	@go mod tidy
 
## test: Run unit test.
.PHONY: test
test:
	@$(MAKE) go.test
 
## 清理二進(jìn)制文件
clean:
	@if [ -f ./bin/${APP}-linux64 ] ; then rm ./bin/${APP}-linux64; fi
	@if [ -f ./bin/${APP}-win64.exe ] ; then rm ./bin/${APP}-win64.exe; fi
	@if [ -f ./bin/${APP}-darwin64 ] ; then rm ./bin/${APP}-darwin64; fi
 
help:
	@echo "make - 格式化 Go 代碼, 并編譯生成二進(jìn)制文件"
	@echo "make mac - 編譯 Go 代碼, 生成mac的二進(jìn)制文件"
	@echo "make linux - 編譯 Go 代碼, 生成linux二進(jìn)制文件"
	@echo "make win - 編譯 Go 代碼, 生成windows二進(jìn)制文件"
	@echo "make tidy - 執(zhí)行g(shù)o mod tidy"
	@echo "make run - 直接運(yùn)行 Go 代碼"
	@echo "make clean - 移除編譯的二進(jìn)制文件"
	@echo "make all - 編譯多平臺(tái)的二進(jìn)制文件"

4. 一些go項(xiàng)目的makefile參考 kratos微服務(wù)框架makefile

項(xiàng)目地址:kratos/Makefile at main · go-kratos/kratos · GitHub

kratos應(yīng)用使用makefile文件打包,它比我們示例多添加了go工具的環(huán)境配置部分,還有自動(dòng)生成使用gen工具編譯proto文件,我們可以根據(jù)實(shí)際項(xiàng)目需要添加。

iam身份識(shí)別系統(tǒng)使用makefile

項(xiàng)目地址:

iam項(xiàng)目使用makefile更多,它分為一個(gè)入口的makefile文件,同時(shí)它引入了項(xiàng)目scripts目錄下的多個(gè)功能的腳本,如下圖。 它將每個(gè)功能部分干的事情分拆到不同腳本文件,這樣更清晰。提供的功能也更清晰細(xì)致。

到此這篇關(guān)于go使用makefile腳本編譯應(yīng)用的文章就介紹到這了,更多相關(guān)gomakefile編譯應(yīng)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go sync.Map基本原理深入解析

    go sync.Map基本原理深入解析

    這篇文章主要為大家介紹了go sync.Map基本原理深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 使用Go初始化Struct的方法詳解

    使用Go初始化Struct的方法詳解

    面向?qū)ο缶幊陶Z言最基礎(chǔ)的概念就是類(class),不過Go語言并沒有類的概念,所以使用Go語言開發(fā)時(shí),我們一般會(huì)用struct(結(jié)構(gòu)體)來模擬面向?qū)ο笾械念?下面我們來介紹幾種創(chuàng)建struct類型變量的方法,需要的朋友可以參考下
    2024-01-01
  • golang?gorm框架數(shù)據(jù)庫的連接操作示例

    golang?gorm框架數(shù)據(jù)庫的連接操作示例

    這篇文章主要為大家介紹了golang?gorm框架數(shù)據(jù)庫操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Go語言學(xué)習(xí)筆記之反射用法詳解

    Go語言學(xué)習(xí)筆記之反射用法詳解

    這篇文章主要介紹了Go語言學(xué)習(xí)筆記之反射用法,詳細(xì)分析了Go語言中反射的概念、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-05-05
  • go時(shí)間/時(shí)間戳操作大全(小結(jié))

    go時(shí)間/時(shí)間戳操作大全(小結(jié))

    這篇文章主要介紹了go時(shí)間/時(shí)間戳操作大全,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • go語言中range用法

    go語言中range用法

    這篇文章主要介紹了go語言中range用法,實(shí)例分析了Go語言中range的功能及使用技巧,需要的朋友可以參考下
    2015-03-03
  • 一篇文章搞懂Go語言中的Context

    一篇文章搞懂Go語言中的Context

    這篇文章主要介紹了一篇文章搞懂Go語言中的Context,Context攜帶一個(gè)截止日期、一個(gè)取消信號(hào)和其他跨越API邊界的值。上下文的方法可以被多個(gè)gor例程同時(shí)調(diào)用
    2022-07-07
  • 使用Go實(shí)現(xiàn)一個(gè)百行聊天服務(wù)器的示例代碼

    使用Go實(shí)現(xiàn)一個(gè)百行聊天服務(wù)器的示例代碼

    前段時(shí)間, redis作者整了個(gè)c語言版本的聊天服務(wù)器,代碼量攏共不過百行,于是, 心血來潮下, 我也整了個(gè)Go語言版本, 簡單來說就是實(shí)現(xiàn)了一個(gè)聊天室的功能,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Go?語言?json解析框架與?gjson?詳解

    Go?語言?json解析框架與?gjson?詳解

    這篇文章主要介紹了Go語言json解析框架與gjson,JSON?解析是我們不可避免的常見問題,在Go語言中,我們可以借助gjson庫來方便的進(jìn)行json屬性的提取與解析,需要的朋友可以參考一下
    2022-07-07
  • Go結(jié)合JavaScript實(shí)現(xiàn)抓取網(wǎng)頁中的圖像鏈接

    Go結(jié)合JavaScript實(shí)現(xiàn)抓取網(wǎng)頁中的圖像鏈接

    這篇文章主要為大家詳細(xì)介紹了Go語言如何結(jié)合JavaScript實(shí)現(xiàn)抓取網(wǎng)頁中的圖像鏈接,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11

最新評論