Golang项目中Makefile编写

栏目: Go · 发布时间: 6年前

内容简介:Go项目有很多命令,且带有参数,可能我们平时开发的时候最常用的就是 go build 、go run 但是当我们使用其他命令时,通常就会携带一堆参数, 比如 go test -v -count=1 - ... 这个时候一个构建脚本可以解决问题,一段Makefile的规则也能解决问题。我个人更加倾向Makefile+script去解决复杂的事情。一个简单的Makefile应该是如下规则格式执行目标,处理先决条件,然后做剩下的事情

背景

Go项目有很多命令,且带有参数,可能我们平时开发的时候最常用的就是 go build 、go run 但是当我们使用其他命令时,通常就会携带一堆参数, 比如 go test -v -count=1 - ... 这个时候一个构建脚本可以解决问题,一段Makefile的规则也能解决问题。我个人更加倾向Makefile+script去解决复杂的事情。

Makefile文件格式

一个简单的Makefile应该是如下规则格式

target ... : prerequisites ...
    recipe
    ...
    ...

// 直观一点的 - tab很重要
<target> : <prerequisites> 
[tab]  <commands>

执行目标,处理先决条件,然后做剩下的事情

install:
    echo installing

build: install
    go build -o main main.go

当执行 make build 其实就是执行了 install-build 下面的命令

常用符号解释

  • target: 即自定义的自己想要执行的命令
  • prerequisites: 先决条件,执行在target之前,多个用空格隔开
  • tab: 每一个command前面一定要有制表符,用于标示这是命令
  • commands: 具体执行的命令。
  • .PHONY 伪指令,主要作用是命名避免与同名文件冲突和提高性能,加上后此参数,当存在冲突文件,也会执行 target, 否则会报错。
  • 不带执行参数,默认执行第一个target
  • 在command前加上@,禁止打印出command执行语句,只显示执行结果
  • ${val}表示变量,与 shell 一样使用
  • 允许使用通配符
  • ‘#’表示注释

简单示例

# 二进制文件名
PROJECT="main"
# 启动文件PATH
MAIN_PATH="main.go"
VERSION="v0.0.1"
DATE= `date +%FT%T%z`

# 可以执行函数,但是函数不能存在 command
ifeq (${VERSION}, "v0.0.1") 
    VERSION=VERSION = "v0.0.1"
endif

version:
    @echo ${VERSION}

# .PHONY 有 build 文件,不影响 build 命令执行
.PHONY: build
build:
    @echo version: ${VERSION} date: ${DATE} os: Mac OS
    @go  build -o ${PROJECT} ${MAIN_PATH}

install:
    @echo download package
    @go mod download

# 交叉编译运行在 linux 系统环境
build-linux:
    @echo version: ${VERSION} date: ${DATE} os: linux-centOS
    @GOOS=linux go build -o ${PROJECT} ${MAIN_PATH}

run:   build
    @./${PROJECT}

clean:
    rm -rf ./log

更多用法请参考文档

注意事项

  1. *** missing separator. Stop. 错误解决方案:

Makefile 文件,执行命令前面需要用 Tab 制表符标示,空格等无效。如果使用编辑器,注意编辑器设置 Tab 按键的解析,是制表符还是空格。

如果喜欢请点一个赞,如果有疑问请留一条言

转载请注名出处或联系 zhongqing2016@qq.com


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

函数式算法设计珠玑

函数式算法设计珠玑

Richard Bird / 苏统华、孙芳媛、郝文超、徐琴 / 机械工业出版社 / 2017-4-1 / 69.00

本书采用完全崭新的方式介绍算法设计。全书由30个珠玑构成,每个珠玑单独列为一章,用于解决一个特定编程问题。这些问题的出处五花八门,有的来自游戏或拼图,有的是有趣的组合任务,还有的是散落于数据压缩及字串匹配等领域的更为熟悉的算法。每个珠玑以使用函数式编程语言Haskell对问题进行描述作为开始,每个解答均是诉诸于函数式编程法则从问题表述中计算得到。本书适用于那些喜欢学习算法设计思想的函数式编程人员、......一起来看看 《函数式算法设计珠玑》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具