当前位置: 首页 > 科技观察

GoProjectIntroducingGoUsingMakefile

时间:2023-03-13 04:29:23 科技观察

01提供了一个名为go的命令,可以自动下载、构建、安装和测试Go包和命令。Go提供了go命令,官方的目的是不需要编写Makefile,而是能够仅使用Go源代码本身中的信息来构建Go代码。但是,我们并不需要完全放弃在Go项目中使用make和Makefile。我们可以利用Makefile这个“伪目标”来简化使用go命令的复杂性,规范团队使用go命令的方式,提高个人或团队的工作效率。02make和Makefilemake命令行工具可以自动判断一个程序是否需要重新编译。其实make并不局限于程序。我们可以用它来描述任何任务。每当其他文件更改时,某些文件必须从其他文件自动更新。在使用make命令行工具之前,我们需要编写一个名为Makefile的文件,它描述了程序中文件之前的关系,并提供了更新各个文件的命令。也就是说,Makefile决定了make做什么。关于Makefile的介绍,有兴趣的读者可以参考相关资料进行深入学习。本文只介绍Makefile的规则(格式),如下:target...:requirements...command......ortarget...:requirements...;command阅读示例代码上面target是目标文件,多个目标文件用空格隔开,一般只有一个目标文件,也可以是“伪目标”(某个操作名);先决条件是先决条件;command是“命令”,可以在先决条件后用分号隔开,也可以换行,但必须以.开头。如果要使用其他键,可以使用内置变量.RECIPEPREFIX语句。target目标是必需的,不能省略。先决条件和命令是可选的,但其中之一必须存在。03Go项目使用Makefile在Go项目中使用Makefile,一般我们只使用“伪目标”。下面以gobuild构建可执行文件为例,介绍如何在Go项目中使用Makefile。示例代码:构建:gobuild-oblog阅读上面的示例代码,我们写了一个简单的Makefile,定义了一个“伪目标”构建,命令是gobuild-oblog,构建一个名为blog.blog的可执行文件。使用make命令行工具,运行“伪目标”构建。makebuild运行makebuild,终端打印出Makefile中“伪目标”构建的命令。gobuild-oblog如果我们不想打印出执行的命令,可以在命令前加上@符号。在实际的项目开发中,我们可能需要构建多个操作系统的可执行文件。然后我们写一个Makefile,加入三个“伪目标”,分别是windows、linux和darwin。示例代码:APP=blogbuild:@gobuild-o${APP}windows:@GOOS=windowsgobuild-o${APP}-windowslinux:@GOOS=linuxgobuild-o${APP}-linuxdarwin:@GOOS=darwingobuild-o${APP}-darwin看上面的示例代码,我们定义了一个自定义变量APP,在命令行中使用$(APP)调用变量,GOOS指定操作系统,在开始,不再打印Excutinganorder。运行makewindows、makelinux和makedarwin,分别为windows、linux和drawin操作系统构建可执行文件。运行结果如下:.├──Makefile├──blog├──blog-darwin├──blog-linux├──blog-windows├──go.mod└──main.go需要注意的是也就是说,如果有文件名与“伪目标”相同,那么“伪目标”就不能使用make命令来执行指定的命令。因为make发现和“伪目标”同名的文件已经存在,所以不会重新构建,所以不会运行指定的命令。为避免此问题,您可以使用内置的目标名称。PHONY声明这些“伪目标”名称是“假目标”,而不是与“假目标”同名的文件。完整的Makefile:APP=blog.PHONY:helpallbuildwindowslinuxdarwinhelp:@echo"usage:make