千家信息网

怎么掌握Makefile的知识

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天就跟大家聊聊有关怎么掌握Makefile的知识,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。如果你现在使用 macOS 或者 Linux,
千家信息网最后更新 2026年10月31日怎么掌握Makefile的知识

今天就跟大家聊聊有关怎么掌握Makefile的知识,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

如果你现在使用 macOS 或者 Linux,那么你可以在终端输入命令man make,查看make命令的帮助文档,如下图所示:

通过make命令,你可以快速运行一大段 Shell 命令,从而实现一键编译代码,一键格式化代码等等功能。

要学习 Makefile,你需要有一个Linux 或者 macOS,然后需要知道两个概念:make命令和Makefile文件。其中,Makefile文件是你自己写的一个文本文件,它的名字叫做Makefile,不能修改大小写,只能叫这个名字。而make是 macOS 和 Linux 中自带的一个命令。当我们执行make命令的时候,它自动读取Makefile文件,从而决定自己要做什么事情。

我们来看一个实际例子。下图为一段很简单的 Golang 代码:

代码里面,有一些逗号后面没有空格,结构体也写得参差不齐。当我们要格式化一个.go文件的时候,一般是在当前文件夹下面执行命令:

gofmt -w xxx.go

运行以后,如下图所示:

你为了执行这个命令,你需要敲15次键盘。而且如果你的项目里面有很多个.go文件,并且他们位于不同的文件夹里面,那么你还需要执行命令:

find . -name "*.go" | xargs gofmt -w

要敲的键盘就更多了。

这个时候,我们可以在项目根目录创建一个Makefile文件,其内容如下:

fmt:  find . -name "*.go" | xargs gofmt -w

如下图所示:

于是,当我们在项目根目录执行命令:make fmt的时候,整个项目里面的所有.go文件都会被自动格式化。

Makefile文件的格式如下:

名字1:  shell 命令1  shell 命令2  shell 命令3 名字2:  shell 命令4  shell 命令5  shell 命令6

其中,名字1 名字2用于执行命令make 名字,每一个名字下面可以跟很多条 Shell 命令。这里看起来有点像是 Python 的缩进。但需要特别注意的是,Makefile 的缩进只能使用 Tab 键,不能使用空格。

我们再来举个例子,现在,我需要把项目编译生成一个可执行文件,然后把这个可执行文件连同data.json一起复制到 一个叫做 output 的文件夹中。那么,我们的 Makefile 可以这样写:

fmt:  gofmt -w *.go  build:  rm -rf output  mkdir output  go build -o JsonReader main.go  mv JsonReader ./output/  cp data.json ./output/

然后,当我们执行命令make build的时候,它下面的5行命令就一次性自动执行了。

再来一个例子,可能有一些程序开发完成以后,需要在本地 Docker 环境里面运行。但是如果已经有一个同名容器在运行了,我们必须先停止容器,删除容器,然后才能重新运行。但是如果有了 Makefile,这也就是一行命令的事情:

deploy:  docker build -t xxx:latest  docker stop json_reader  docker rm json_reader  docker run --name json_reader --network host -d xxx:latest

除此之外,Makefile 还支持串联多个名字下面的 shell 命令。例如,我想先格式化代码,然后编译成可执行文件,最后再使用 Docker 部署,那么,我们最终的 Makefile 文件如下图所示:

此时,我只需要在项目根目录中执行命令make,不带任何参数,那么,fmt、build和deploy下面的所有 Shell 命令都会按顺序依次执行。从而大大减少了我们的工作量。

可以说,无论是 Golang 项目还是 Python 还是其他项目,使用 Makefile 来自动化执行一些繁琐重复的命令,是一个一劳永逸的事情。

看完上述内容,你们对怎么掌握Makefile的知识有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

命令 文件 名字 项目 代码 时候 格式 运行 内容 知识 事情 例子 容器 文件夹 根目录 面的 编译 更多 空格 还是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 广州大一互联网络科技有限公司 广州紫鲸互联网科技有限公司 深圳恒合互联网络科技有限公司 互联网科技公司的优势 科技创新与互联网经济 今日互联网科技 远信互联网科技 互联网科技logo 互联网科技公司需要的职位 互联网系的金融科技公司 湖北码尼互联网科技有限公司电话 河南住房之家互联网科技 为客找房互联网科技公司怎么样 科技互联网的核心竞争力 小米互联网科技园入驻 互联网科技包装股 银川新华互联网科技学校原画 北京军民互联网科技公司 华人运通互联网科技公司 亿人帮互联网科技有限公司 互联网科技的未来发展 互联网科技论坛 无锡溥仪互联网科技有限公司 广西拼得多互联网科技有限公司 互联网时代科技改变生活 互联网科技大奖都有哪些公司 互联网科技数字货币 工业互联网科技成果转化 互联网科技大会大佬
0