V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
dafsic
V2EX  ›  Go 编程语言

分享一个 go 的 makefile,请指教

  •  1
     
  •   dafsic · 2019-12-19 09:54:57 +08:00 · 4481 次点击
    这是一个创建于 1836 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不是说多牛逼,也是从网上各种地方抄来的,就是自己写代码够用了,需要的可以参考,好的优化建议也提提,力求简单明了。

    APP:=xxx
    PACKAGE:=github.com/xxx/xxx
    
    GO_VERSION:=$(shell go version)
    BUILD_TIME:=$(shell date +%Y-%m-%dT%H:%M:%S%z)
    COMMIT_HASH:=$(shell git rev-parse --short=8 HEAD || echo unknown)
    GIT_BRANCH:=$(shell git rev-parse --abbrev-ref HEAD)
    GIT_TAG:=$(shell git tag)
    
    GO_LDFLAGS += -X '$(PACKAGE)/version.BUILD_TIME=$(BUILD_TIME)'
    GO_LDFLAGS += -X '$(PACKAGE)/version.GO_VERSION=$(GO_VERSION)'
    GO_LDFLAGS += -X '$(PACKAGE)/version.COMMIT_HASH=$(COMMIT_HASH)'
    GO_LDFLAGS += -X '$(PACKAGE)/version.GIT_BRANCH=$(GIT_BRANCH)'
    GO_LDFLAGS += -X '$(PACKAGE)/version.PROJECT_VERSION=$(GIT_TAG)'
    GO_LDFLAGS += -s -w
    
    .PHONY: default darwin linux clean check
    
    default: linux ## Build the default binary file (default: linux)
    
    check: ## Check working tree is clean or not
    ifneq ($(shell git status -s),)
    	$(error You must run git commit)
    endif
    
    linux: check ## Build the ELF binary file
    	GOOS=linux GOARCH=amd64 CGO_ENABLE=0 go build -mod=readonly -ldflags "$(GO_LDFLAGS)" -o $(APP) .
    
    darwin: check ## Build the Mach-O binary file
    	GOOS=darwin GOARCH=amd64 CGO_ENABLE=0 go build -mod=readonly -ldflags "$(GO_LDFLAGS)" -o $(APP) .
    
    clean: ## Remove previous build
    	go clean
    
    help: ## Display this help screen
    	@grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
    
    11 条回复    2019-12-19 13:06:14 +08:00
    MeteorCat
        1
    MeteorCat  
       2019-12-19 09:57:50 +08:00 via Android
    用 markfile 调 shell 来搞 golang,俄罗斯套娃?
    lhx2008
        2
    lhx2008  
       2019-12-19 09:59:16 +08:00 via Android
    没看明白和直接调 go 命令的区别
    dafsic
        3
    dafsic  
    OP
       2019-12-19 10:10:30 +08:00
    顺便解释一句作用,1.mac 上写代码,交叉编译成 elf 文件。2.将 git 的分支、commit id、tag、编译时间、go 版本信息编译到 elf 中。
    tiedan
        4
    tiedan  
       2019-12-19 10:18:09 +08:00
    感觉直接用 shell 脚本会不会更好
    dreamerlv3ex
        5
    dreamerlv3ex  
       2019-12-19 10:18:28 +08:00
    我还以为是真的 makefile,吓我一跳。
    tairan2006
        6
    tairan2006  
       2019-12-19 10:27:32 +08:00
    @lhx2008 用脚本少打点字
    LANB0
        7
    LANB0  
       2019-12-19 11:45:05 +08:00
    这一看就是从 C/C++转过去的,和百度那个 BFE 一个路子
    petelin
        8
    petelin  
       2019-12-19 12:32:18 +08:00 via iPhone
    就是起个别名
    wakaka
        9
    wakaka  
       2019-12-19 12:50:45 +08:00
    撸点复杂的工作还可以,比如生成 grpc 的 pb 文件等等
    ppphp
        10
    ppphp  
       2019-12-19 12:53:16 +08:00
    GIT_TAG:=$(shell git tag)
    这个能行吗。。
    dyrone
        11
    dyrone  
       2019-12-19 13:06:14 +08:00
    部门描述:

    代码平台(代码托管、代码效能、代码智能)是阿里巴巴一站式智能研发协同平台的核心服务,对内为阿里几万产品研发相关人员提供工具支撑,对外是阿里云开发者生态关键一环。“Work Like Alibaba”将成为中国及至全世界开发者最潮流的口号。

    本职位主要职责是负责代码平台基础设施的架构演进、Git 核心技术开发,代码领域技术趋势跟踪、下一代代码平台预言。我们是一群懂代码,爱 Git,有技术有梦想的工程师。让我们一起携手解决跨地域、分布式、海量代码托管等世界级业务和技术难题,为阿里巴巴集团内部、生态伙伴以及云上开发者服务。


    我们的使命:帮助企业让更多的工作内容和工作行为 “有意义” 的数字化。
    我们的愿景:服务一亿人的数字化办公。


    岗位描述:
    1、代码平台后端大规模服务器集群的分布式架构演进;
    2、服务器计算、存储资源的再平衡、故障修复与隔离,服务器智能运维;
    3、基于分布式存储的下一代代码平台,实现低延迟、高效率在线编码;
    4、Git 核心代码开发,业界趋势跟踪,保持技术领先,优化用户体验等等。


    岗位要求:
    1、3 到 8 年的工作经验,精通 Go 语言、C 语言或 java 语言的一种。
    2、熟悉分布式一致性协议,有分布式系统开发经验。
    3、熟悉微服务架构,RPC 的基本原理、gRPC、pb 等原理和使用,加分。
    4、热爱技术,有较强的学习能力、良好的团队合作能力、抗压能力。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2583 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:57 · PVG 12:57 · LAX 20:57 · JFK 23:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.