golang搭配 makefile 真香!

2021-10-22 14:12:38 字數 1956 閱讀 6341

golang內建了很多go commands可以幫助我們完成go每個階段的開發工作,但是很多時候我們需要分享我們的**給其他人,初次看到我們**工程的人可能並不知道怎麼讓它跑起來。當然你也可以通過readme.md或者其他方式來告知讀者。

但對於那些只想快速構建程式的人來說,使用makefile很好得抽象了技術細節,當我們看到makefile檔案時自然能想到使用make或者make install來構建程式。從此告別記憶長串的命令瘋狂敲鍵盤 偶爾還會敲錯的尷尬場景????

比如:

go build -o hello hello.go

./hello

使用makefile,我們可以很輕鬆自定義乙個target完成這個任務

.phony: buildandrun

bin_file=hello

buildandrun:

@go build -o "$" hello.go

./"$"

然後我們就可以用如下命令完成工作了

make

./"hello"

hello world

我們真正上線構建編譯時的命令可能是這樣的 :

go install -tags="$" -ldflags "-x version.version=$(version) -x version.date=$(date) -x version.commit=$(commit) -x version.branch=$(branch) -w -s" -gcflags=all="-n -l " ./...
裝配上makefile,我們僅僅敲4個字元make即可,我們開發過程中,不同階段需要幹不同的事兒,

makefile的goal機制對這種情況進行了很好的抽象,以下是我工作當中的makefile的配置,雖然不是很複雜但真的很有用。

.phony: all build clean run check cover lint docker help

bin_file=hello

all: check build

build:

@go build -o "$"

clean:

go clean

rm --force "xx.out"

test:

go test

check:

go fmt ./

go vet ./

cover:

go test -coverprofile xx.out

go tool cover -html=xx.out

run:

./"$"

lint:

golangci-lint run --enable-all

docker:

@docker build -t leo/hello:latest .

help:

@echo "make 格式化go** 並編譯生成二進位制檔案"

@echo "make build 編譯go**生成二進位制檔案"

@echo "make clean 清理中間目標檔案"

@echo "make test 執行測試case"

@echo "make check 格式化go**"

@echo "make cover 檢查測試覆蓋率"

@echo "make run 直接執行程式"

@echo "make lint 執行**檢查"

@echo "make docker 構建docker映象"

使用makefile來管理我們程式的構建,減少了大量輸入、拼寫錯誤,簡化構建專案的難度。真實線上環境配合ci/cd更佳,如果你還沒有嘗試使用makefile,那真的可以試試。

使用autotools生成makefile

接下來就要正式步驟 1,autoscan 生成了一乙個configure.scan檔案。編輯它,增加巨集宣告 am init automake hello,1.0 和ac config files makefile 然後儲存為configure.ac。其實configure.scan就是乙個模板。p...

Linux gcc編譯過程及Makefile檔案

選項 含義 o 指定輸出檔名稱 e只預處理 s只編譯 c編譯和彙編,但是不鏈結 巨集的替換,處理預處理指令,刪除注釋,include的檔案加入到該檔案,新增行號和檔案的標識 gcc e main.c o main.i檔案一下變大很多,檢視內容是stdio.h的函式定義等內容 由高階語言,生成彙編 g...

asp搭配mysql 讓ASP搭配MYSQL

讓asp搭配mysql 所需要工具 mysql 4.1.11 win32 myodbc 3.51.11 1 dll myodbc 3.51.11 1 win mysqlcc 0.9.4 win32 註冊檔案mydbc.reg regedit4 hkey local machinesoftwareod...