前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go项目中Makefile的简单使用

Go项目中Makefile的简单使用

原创
作者头像
海风极客
发布2023-12-08 22:41:09
3432
发布2023-12-08 22:41:09
举报
文章被收录于专栏:扯编程的淡扯编程的淡
伪目标和变量
伪目标

最早先的一个例子中,我们提到过一个“clean”的目标,这是一个“伪目标”,

代码语言:text
复制
clean:
    rm *.o temp

更为稳健的做法是:

代码语言:text
复制
.PHONY : clean
clean :
    - rm *.o temp

前面说过, .PHONY 表示 clean 是一个“伪目标”。而在 rm 命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。当然, clean 的规则不要放在文件的开头,不然,这就会变成make的默认目标,相信谁也不愿意这样。不成文的规矩是——“clean从来都是放在文件的最后”。

.PHONY : all 声明了“all”这个目标为“伪目标”。(注:这里的显式“.PHONY : all” 不写的话一般情况也可以正确的执行,这样make可通过隐式规则推导出, “all” 是一个伪目标,执行make不会生成“all”文件,而执行后面的多个目标。建议:显式写出是一个好习惯。)

小结:因为伪目标总是会被执行,所以其依赖总是会被决议。通过这种方式,可以达到同时执行所有依赖项的目的。

变量的使用

(1)变量的声明:

变量在声明时需要给予初值,而在使用时,需要给在变量名前加上 $ 符号,但最好用小括号 () 或是大括号 {} 把变量给包括起来。如果你要使用真实的 $ 字符,那么你需要用 $$ 来表示。

(2)演示

hello.txt

代码语言:text
复制
Hello~

Makefile

代码语言:text
复制
i=10
txt=./hello.txt

run:
        @echo $(i)
        @cat $(txt)

执行

(3)扩展

变量的命名字可以包含字符、数字,下划线(可以是数字开头),但不应该含有 :#= 或是空字符(空格、回车等)。变量是大小写敏感的,“foo”、“Foo”和“FOO”是三个不同的变量名。传统的Makefile的变量名是全大写的命名方式,但我推荐使用大小写搭配的变量名,如:MakeFlags。这样可以避免和系统的变量冲突,而发生意外的事情。

3.2 Go项目的常用命令

为什么要说一下Go中的常用命令呢,因为Go项目中Makefile的使用较为简单,大多都是对Go命令的一些执行操作,因此我们首先要熟知Go语言中的常用命令,才能更好的编写Makefile。

  • Go一般命令:
    • build: 编译包和依赖。
    • clean: 移除当前源码包里面编译生成的文件。
    • doc: 显示包或者符号的文档。
    • env: 打印go的环境信息,查看GOPATH,GOROOT环境变量都可以使用该命令查看。
    • bug: 启动错误报告。
    • fix: 运行go tool fix。
    • fmt: 运行gofmt进行格式化。
    • generate: 从processing source生成go文件。
    • get: 下载并安装包和依赖。
    • install: 编译并安装包和依赖。
    • list: 列出包。
    • run: 编译并运行go程序。
    • test: 自动读取源码目录下面名为*_test.go的文件,生成并运行测试用的可执行文件。
    • tool: 运行go提供的工具。
    • version: 显示当前环境安装go的版本。
    • vet: 运行go tool vet。
  • Go mod命令:
    • go mod init [项目名称]:初始化工程项目。
    • go mod graph:输入工程当前所有的依赖。
    • go mod download: 使用此命令来下载指定的模块到本地。
    • go mod tidy:就是把不需要的依赖给删除掉。  
    • go mod verify:验证mod里依赖是否正确,同时也会验证go源代码其它依赖的内容。
    • go mod why:可以展示及指定依赖关系。比如代码中有个依赖包,但是并不知道这个包的依赖关系,这时候就可以使用这个命令查看。
3.3 使用实践

项目目录:

Makefile文件内容:

代码语言:text
复制
.PHONY:tidy
tidy:
   go mod tidy

.PHONY:build
build:
   go build ./cmd/main.go

.PHONY:run
run:
   @./main

执行:

4 总结

Makefile文件是在项目构建这非常重要的一环,最初认识它是在GitHub上的开源项目中,发现每个项目都有一个Makefile,而且语法看不懂,于是就专门抽时间学习一下,当然由于本人初次学习,本文涵盖的知识点有限,更详细的学习请看 【这篇文章】,在本文这如有错误和不足,感谢读者指出!

参考链接:

https://github.com/seisman/how-to-write-makefile

https://seisman.github.io/how-to-write-makefile/

https://www.cnblogs.com/songgj/p/13167251.html

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 伪目标和变量
    • 伪目标
      • 变量的使用
      • 3.2 Go项目的常用命令
      • 3.3 使用实践
      • 4 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档