欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > Makefile:超简单快速入门(go示例)

Makefile:超简单快速入门(go示例)

2025/4/18 11:32:42 来源:https://blog.csdn.net/2301_81125077/article/details/147106195  浏览:    关键词:Makefile:超简单快速入门(go示例)

因为没有找到合适的快速入门的博客,所以写了这篇,可以帮助我们快速掌握基础和常用内容。

规则

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

target:一个目标代表一条规则,可以是一个或多个文件名。也可以是某个操作的名字(标签),称为伪目标

prerequisites:前置条件,这一项是 可选参数 。通常是多个文件名、伪目标。它的作用是 target 是否需要重新构建的标准,如果前置条件不存在或有过更新(文件的最后一次修改时间)则认为 target 需要重新构建

command:构建这一个 target 的具体命令集

快速入门

变量

大多数脚本都支持变量,Makefile也支持变量,当在不同目标中使用相同配置时,使用变量可以让脚本更通用、以维护。定义变量使用等号:BINARY_NAME=main.exe, 引用变量使用 ${variable_name}

// main.gopackage mainimport ("fmt"
)func main() {fmt.Println("hello world")
}
#MakefileBINARY_NAME=main.exebuild:go build -o ${BINARY_NAME} main.gorun:./${BINARY_NAME}
Windows PowerShell:
PS E:\GOcode\gRPC\makefile> make build
go build -o main.exe main.go
PS E:\GOcode\gRPC\makefile> make run
./main.exe
hello world

@符号

make 默认会打印每条命令,再执行,包括注释。这个行为被定义为 回声 。可以在对应命令前加上 @,可指定该命令不被打印到标准输出上。

#MakefileBINARY_NAME=main.exebuild:go build -o ${BINARY_NAME} main.gorun:./${BINARY_NAME}echo:echo "test"@echo "test2"
Windows PowerShell:
E:\GOcode\gRPC\makefile
make echo
echo "test"
test
test2

单独使用make

单独一个make只会列表中的第一个 target

Windows PowerShell:
E:\GOcode\gRPC\makefile>make
go build -o main.exe main.go

all

all 是 Makefile 中常见的默认目标(通常放在文件第一个目标的位置),运行 makemake all 时会自动执行它。

它通过依赖关系(dependencies)将所有需要构建的子目标(如编译程序、生成库文件等)组合在一起, 一键完成完整构建

#MakefileBINARY_NAME=main.exeall: build runbuild:go build -o ${BINARY_NAME} main.gorun:./${BINARY_NAME}echo:echo "test"@echo "test2"
Windows PowerShell:
E:\GOcode\gRPC\makefile
make
go build -o ./main.exe main.go
./main.exe
hello world

.PHONY

.PHONY的作用是声明伪目标 ,声明为伪目标会怎么样呢?

  • 声明为伪目标后:在执行对应的命令时,make 就不会去检查是否存在 build / clean / tool / lint / help 其对应的文件,而是每次都会运行标签对应的命令
  • 若不声明:恰好存在对应的文件,则 make 将会认为 xx 文件已存在,没有重新构建的必要了。

如下例:

没有声明时,clean 指令直接不执行。

#MakefileBINARY_NAME=main.exeall: build runbuild:go build -o ${BINARY_NAME} main.gorun:./${BINARY_NAME}echo:echo "test"@echo "test2"mk:echo "clean" >> cleanecho "one" >> one.txtclean:rm -f one.txt
Windows PowerShell:
E:\GOcode\gRPC\makefile
make mk
echo "clean" >> clean
echo "one" >> one.txt
E:\GOcode\gRPC\makefile
make clean
make: `clean' is up to date.

声明后执行指令:

#Makefile.PHONY: clean all build runBINARY_NAME=main.exeall: build runbuild:go build -o ${BINARY_NAME} main.gorun:./${BINARY_NAME}echo:echo "test"@echo "test2"mk:echo "clean" >> cleanecho "one" >> one.txtclean:rm -f "one.txt"
Windows PowerShell:
E:\GOcode\gRPC\makefile
make clean
rm -f "one.txt"

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词