Makefile文件是什么?

初次接触Makefile还是在跟朋友一起写Go项目的时候,他给我们介绍的,第一感觉听说,感觉挺好用,作为一个码农,对于未知的技术,应该保持好奇心,管它三七二十一,先了解了解,用起来再说

下面引用了一堆官方介绍:

很多 Linux(Unix) 做开发的初学者不了解 Makefile 是什么,甚至大部分 Windows 开发工程师对 Makefile 都特别陌生。这个其实很正常,如果你是在 Windows 下作开发的话不需要去考虑这个问题,因为 Windows 下的集成开发环境(IDE)已经内置了 Makefile,或者说会自动生成 Makefile,我们不用去手动编写。

Linux 中却不能这样,需要我们去手动的完成这项工作。Linux 下可以学习的开发语言有很多,常见的有 C/C++语言、python、java 等等。如果你想要在 Linux(Unix) 下做开发的话,不了解 Makefile 是一件非常失败的事情,甚至说你就成为不了一个合格的 Linux 开发工程师。不懂 Makefile,就操作不了多文件编程,就完成不了相对于大的工程项目的操作。如果你想在 Linux(Unix) 环境下做开发的话,Makefile 是必须掌握的一项技能。

那么,究竟什么是 Makefile 呢?

Makefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译,那些文件需要重建等等。编译整个工程需要涉及到的,在 Makefile 中都可以进行描述。换句话说,Makefile 可以使得我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数。

复制了一堆了,总结一下:

make介绍

make是一个构建自动化工具,会在当前目录下寻找Makefile或makefile文件。如果存在相应的文件,它就会依据其中定义好的规则完成构建任务。

Makefile介绍

我们可以把Makefile简单理解为它定义了一个项目文件的编译规则。借助Makefile我们在编译过程中不再需要每次手动输入编译的命令和编译的参数,可以极大简化项目编译过程。同时使用Makefile也可以在项目中确定具体的编译规则和流程,很多开源项目中都会定义Makefile文件。

废话不多说了,赶紧为Go项目编写Makefile

规则概述

Makefile由多条规则组成,每条规则主要由两个部分组成,分别是依赖的关系和执行的命令。

其结构如下所示:

[target] ... : [prerequisites] ...
<tab>[command]
    ...
    ...

其中:

  • targets:规则的目标
  • prerequisites:可选的要生成 targets 需要的文件或者是目标。
  • command:make 需要执行的命令(任意的 shell 命令)。可以有多条命令,每一条命令占一行。
build:
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o xx

示例

.PHONY: all build run gotool clean help

BINARY="myapp"

all: gotool build

build:
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ${BINARY}

run:
	@go run ./

gotool:
	go fmt ./
	go vet ./

clean:
	@if [ -f ${BINARY} ] ; then rm ${BINARY} ; fi

help:
	@echo "make - 格式化 Go 代码, 并编译生成二进制文件"
	@echo "make build - 编译 Go 代码, 生成二进制文件"
	@echo "make run - 直接运行 Go 代码"
	@echo "make clean - 移除二进制文件和 vim swap files"
	@echo "make gotool - 运行 Go 工具 'fmt' and 'vet'"

或者

.PHONY:clean
clean:
    rm -rf *.o test
    
.PHONY:run
run:
    @go run ./
  • BINARY="myapp"是定义变量。

  • .PHONY用来定义伪目标。不创建目标文件,而是去执行这个目标下面的命令。

  • @符号就是代表执行此命令但是不用输出该命令

  • clean命令可以看出可以支持shell命令

最近用的kratos微服务框架等也都在使用这个,先用起来在慢慢研究吧~

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值