<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
可能是因為編譯太簡單了,golang 並沒有一個官方的構建工具(類似於 java 的 maven 和 gradle之類的),但是除了編譯,我們可能還需要下載依賴,執行測試,甚至像 easyjson,protobuf,thrift 這樣的工具下載和程式碼生成,如果沒有構建工具,這些工作就會非常麻煩
為了解決這個問題,之前寫過一個 everything.sh
的指令碼,把所有的操作都封裝在這個指令碼裡面,只需要執行類似於 sh everything.sh dependency
的命令就可以完成對應的工作,大大簡化了構建過程,但是也有一個問題,shell 指令碼本身的可讀性並不是很好,而且對於各個操作之間的依賴不好描述
一次偶然的機會,在 github 上看到有人用 Makefile,就嘗試了一下,發現真的非常合適,Makefile 本身就是用來描述依賴的,可讀性非常好,而且與強大的 shell 結合在一起,基本可以實現任何想要的功能
下面是我在實際專案中使用的一個 Makefile,支援的功能包括
make build
: 編譯
make vendor
: 下載依賴
make api
: 生成協定程式碼
make json
: easyjson 程式碼生成
make test
: 執行單元測試
make benchmark
: 執行效能測試
make stat
: 程式碼複雜度統計,程式碼行數統計
make clean
: 清理 build 目錄
make deep_clean
: 清理所有程式碼以外的其他檔案
make third
: 下載所有依賴的第三方工具
make protoc
: 下載 protobuf 工具
make glide
: 下載 glide 依賴管理工具
make golang
: 下載 golang 環境
make cloc
: 下載 cloc 統計工具
make gocyclo
: 下載 gocyclo 圈複雜度計算工具
make easyjson
: 下載 easyjson 工具
export PATH:=${PATH}:${GOPATH}/bin:$(shell pwd)/third/go/bin:$(shell pwd)/third/protobuf/bin:$(shell pwd)/third/cloc-1.76 .PHONY: all all: third vendor api json build test stat build: cmd/rta_server/*.go internal/*/*.go scripts/version.sh Makefile vendor api json @echo "編譯" @rm -rf build/ && mkdir -p build/bin/ && go build -ldflags "-X 'main.AppVersion=`sh scripts/version.sh`'" cmd/rta_server/main.go && mv main build/bin/rta_server && cp -r configs build/configs/ vendor: glide.lock glide.yaml @echo "下載 golang 依賴" glide install api: vendor @echo "生成協定檔案" @rm -rf api && mkdir api && cd vendor/gitlab.mobvista.com/vta/rta_proto.git/ && protoc --go_out=plugins=grpc:. *.proto && cd - && cp vendor/gitlab.mobvista.com/vta/rta_proto.git/* api/ json: internal/rcommon/rta_common_easyjson.go internal/rcommon/rta_common_easyjson.go: internal/rcommon/rta_common.go Makefile easyjson internal/rcommon/rta_common.go .PHONY: test test: vendor api json @echo "執行單元測試" go test -cover internal/rranker/*.go go test -cover internal/rserver/*.go go test -cover internal/rworker/*.go go test -cover internal/rloader/*.go go test -cover internal/rrecall/*.go go test -cover internal/rmaster/*.go go test -cover internal/rsender/*.go benchmark: benchmarkloader benchmarkall .PHONY: benchmarkloader benchmarkloader: vendor api json @echo "執行 loader 效能測試" go test -timeout 2h -bench BenchmarkS3Loader_Load -benchmem -cpuprofile cpu.out -memprofile mem.out -run=^? internal/rloader/* go tool pprof -svg ./rloader.test cpu.out > cpu.benchmarkloader.svg go tool pprof -svg ./rloader.test mem.out > mem.benchmarkloader.svg .PHONY: benchmarkserver benchmarkserver: vendor api json @echo "執行 server 效能測試" go test -timeout 2h -bench BenchmarkServer -benchmem -cpuprofile cpu.out -memprofile mem.out -run=^? internal/rserver/* go tool pprof -svg ./rserver.test cpu.out > cpu.benchmarkserver.svg go tool pprof -svg ./rserver.test mem.out > mem.benchmarkserver.svg .PHONY: benchmarkall benchmarkall: vendor api json @echo "執行 server 效能測試" go test -timeout 2h -bench BenchmarkAll -benchmem -cpuprofile cpu.out -memprofile mem.out -run=^? internal/rserver/* go tool pprof -svg ./rserver.test cpu.out > cpu.benchmarkall.svg go tool pprof -svg ./rserver.test mem.out > mem.benchmarkall.svg .PHONY: benchmarkcache benchmarkcache: vendor api json @echo "測試 redis 叢集效能" go test -timeout 5m -bench BenchmarkRtaCacheBatch -benchmem -cpuprofile cpu.out -memprofile mem.out -run=^? internal/rserver/* .PHONY: stat stat: cloc gocyclo @echo "程式碼行數統計" @ls internal/*/* scripts/* configs/* Makefile | xargs cloc --by-file @echo "圈複雜度統計" @ls internal/*/* | grep -v _test | xargs gocyclo @ls internal/*/* | grep -v _test | xargs gocyclo | awk '{sum+=?1}END{printf("總圈複雜度: %s", sum)}' .PHONY: clean clean: rm -rf build .PHONY: deep_clean deep_clean: rm -rf vendor api build third third: protoc glide golang cloc gocyclo easyjson .PHONY: protoc protoc: golang @hash protoc 2>/dev/null || { echo "安裝 protobuf 程式碼生成工具 protoc" && mkdir -p third && cd third && wget https://github.com/google/protobuf/releases/download/v3.2.0/protobuf-cpp-3.2.0.tar.gz && tar -xzvf protobuf-cpp-3.2.0.tar.gz && cd protobuf-3.2.0 && ./configure --prefix=`pwd`/../protobuf && make -j8 && make install && cd ../.. && protoc --version; } @hash protoc-gen-go 2>/dev/null || { echo "安裝 protobuf golang 外掛 protoc-gen-go" && go get -u github.com/golang/protobuf/{proto,protoc-gen-go}; } .PHONY: glide glide: golang @mkdir -p ?GOPATH/bin @hash glide 2>/dev/null || { echo "安裝依賴管理工具 glide" && curl https://glide.sh/get | sh; } .PHONY: golang golang: @hash go 2>/dev/null || { echo "安裝 golang 環境 go1.10" && mkdir -p third && cd third && wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz && tar -xzvf go1.10.linux-amd64.tar.gz && cd .. && go version; } .PHONY: cloc cloc: @hash cloc 2>/dev/null || { echo "安裝程式碼統計工具 cloc" && mkdir -p third && cd third && wget https://github.com/AlDanial/cloc/archive/v1.76.zip && unzip v1.76.zip; } .PHONY: gocyclo gocyclo: golang @hash gocyclo 2>/dev/null || { echo "安裝程式碼圈複雜度統計工具 gocyclo" && go get -u github.com/fzipp/gocyclo; } .PHONY: easyjson easyjson: golang @hash easyjson 2>/dev/null || { echo "安裝 json 編譯工具 easyjson" && go get -u github.com/mailru/easyjson/...; }
以上就是golang構建工具Makefile使用詳解的詳細內容,更多關於golang構建工具Makefile的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45