首页 > 其他分享 >Go 项目的 MAKE 工具

Go 项目的 MAKE 工具

时间:2023-09-16 15:24:46浏览次数:34  
标签:MAKE Makefile test build go Go 工具

  1. Go 项目的 MAKE 工具

MAKE 工具是 Linux 和 Unix 系统中一种常见的自动化构建工具,通常用于管理和组织软件项目。在 Go 语言中,使用 MAKE 工具可以轻松地管理和构建项目,并自动执行诸如编译、测试、安装等复杂的操作。 下面将介绍如何在 Go 项目中使用 MAKE 工具,并说明其主要优势和用法。 MAKE 工具的优势 MAKE 工具最大的优势在于它可以根据指定的规则来自动执行一系列的任务,从而减少了手动操作的时间和错误率。在 Go 项目中,使用 MAKE 工具可以帮助开发人员完成以下工作:
  1. 编译和构建:MAKE 工具可以根据指定的规则自动编译和构建 Go 项目,生成可执行文件或库文件。
  2. 测试和检查:MAKE 工具可以自动运行项目中的单元测试、性能测试和代码检查,以确保项目质量和可靠性。
  3. 安装和部署:MAKE 工具可以将编译好的程序或库文件自动安装到系统中,并实现自动部署。
  4. 清理和卸载:MAKE 工具可以清除编译过程中生成的临时文件,卸载已安装的程序或库文件。
  1. MAKE 工具的使用方法

使用 MAKE 工具需要创建一个名为 "Makefile" 的文本文件,其中包含了项目中所需的目标、依赖项和命令。 下面是一个简单的 Makefile 文件示例:
复制代码
all: build test

build:
        go build -o myapp main.go

test:
        go test ./...

clean:
        rm -f myapp
这个 Makefile 文件定义了三个目标:all、build 和 test,以及一个清理目标 clean。其中,all 目标依赖于 build 和 test 两个目标,意味着在执行 all 目标时,会先编译并构建项目,然后运行项目中的单元测试。而 build 目标则只负责编译和构建项目,test 目标则只负责运行单元测试。 要使用这个 Makefile 文件,只需要在命令行中输入 "make <target>" 命令即可执行对应的任务。例如,要编译和构建项目,可以输入 "make build" 命令;要运行单元测试,可以输入 "make test" 命令;要执行所有任务,可以输入 "make all" 命令。
  1. MAKE 工具高级用法

除了基本的目标和依赖项之外,MAKE 工具还提供了许多高级功能和技巧,用于进一步优化和简化项目的构建和管理。以下是一些例子:

3.1 变量和参数:

使用变量和参数可以使得 Makefile 文件更加灵活和可配置。例如,可以设置一个变量来存储项目名称,然后在各个目标中引用该变量。
复制代码
APP_NAME=myapp

all: build test

build:
        go build -o $(APP_NAME) main.go

test:
        go test ./... -v

clean:
        rm -f $(APP_NAME)

3.2 条件语句和循环:

MAKE 工具支持基本的条件语句和循环结构,可以根据不同的条件来执行不同的目标或命令。
复制代码
ifeq ($(OS),Windows_NT)
EXTENSION=.exe
else
EXTENSION=
endifall: build testbuild:
        go build -o myapp$(EXTENSION) main.go

test:
        go test ./... -v

clean:
        rm -f myapp$(EXTENSION)

3.3 函数和命令替换:

MAKE 工具允许在 Makefile 中使用自定义函数和命令替 换,可以进一步简化和优化构建过程。例如,可以定义一个函数来获取项目的版本号,并将其用于构建命令中。
复制代码
VERSION=$(shell git describe --tags --abbrev=0)

all: build test

build:
        go build -o myapp -ldflags "-X main.version=$(VERSION)" main.go

test:
        go test ./... -v

clean:
        rm -f myapp
在上述代码中,使用 $(shell) 函数来调用 Git 命令来获取项目版本号,并将其存储在 VERSION 变量中。然后,在编译命令中使用 -ldflags 参数来将版本号传递给程序。

3.4 并行执行:

MAKE 工具支持并行执行多个目标,可以加快构建速度和效率。
复制代码
.PHONY: all build test clean

all: build test

build:
        @echo "Building..."
        @go build -o myapp main.go

test:
        @echo "Testing..."
        @go test ./...

clean:
        @echo "Cleaning..."
        @rm -f myapp

parallel:
        @echo "Parallel execution..."
        @make -j2 build test
在上述代码中,通过在 "make" 命令中添加 "-j2" 参数来指定并行执行数量为 2,从而同时执行 build 和 test 目标。
  1. 总结

MAKE 工具是 Go 项目中常用的自动化构建工具,它可以帮助开发人员自动化管理项目中的任务和操作,从而提高开发效率和减少错误。通过编写 Makefile 文件,可以将所有必要的任务和依赖项组织起来,使得整个项目更加清晰和易于维护。同时,MAKE 工具还支持许多高级功能和技巧,例如变量、参数、条件语句、循环、函数和命令替换等,可以进一步简化和优化构建过程。  
  1. 可参考的教程

以下是一些关于 Go 项目的 MAKE 工具的好文章和链接,供您参考: 5.1 基于 Makefile 的 Go 项目构建 - https://tonybai.com/2017/03/03/build-golang-application-with-makefile/ 这篇文章介绍了如何使用 Makefile 来自动化构建和管理 Go 项目,并提供了一些实用的技巧和示例。 5.2 使用 Makefile 构建 Go 项目 - https://www.jianshu.com/p/3d7e9477decc 这篇文章介绍了如何编写 Makefile 文件来构建 Go 项目,并解释了 Makefile 中的各种语法和规则。 5.3 简单易学的 Makefile 教程 - https://seisman.github.io/how-to-write-makefile/introduction.html 这篇文章介绍了 Makefile 的基本概念、语法和用法,适合初学者阅读。 5.4 MAKE 工具官方文档 - https://www.gnu.org/software/make/manual/make.html 这是 MAKE 工具的官方文档,详细介绍了 MAKE 工具的各种功能和用法,可以作为参考手册使用。    

标签:MAKE,Makefile,test,build,go,Go,工具
From: https://www.cnblogs.com/shoshana-kong/p/17706750.html

相关文章

  • 在CentOS上安装Redis-cli工具
    如果你想在CentOS上安装Redis-cli工具,可以按照以下步骤进行操作:1.安装Redis依赖包:在命令行中执行以下命令安装Redis依赖包:```sudoyuminstallgccmake```2.下载Redis源代码包:从Redis官网(https://redis.io/download)下载最新的Redis源代码包。3.解压源代码包:将下载的Redis......
  • shardingdb:支持分片和并发读写的 GoLevelDB
    概述shardingdb是一个开源包,旨在为GoLevelDB增加分片和并发读写功能。它可以作为LevelDB的替代品,方便地集成到现有项目中。本博客将介绍shardingdb及其功能,并介绍如何在您的项目中使用它。特点-分片支持:shardingdb使您能够将数据分布在多个LevelDB实例中,提高性能和......
  • Ubuntu16.04下C语言编译及makefile应用
    一、不同环境下C语言的编译在Ubuntu16.04下:step1:编写main1.c主程序用nano编好,下面为主程序展示注意:1、主程序中函数的声明step2:编写子程序 step3:用gcc命令编译采用多个文件一起编译,输出放在main1中 gcc的常见用法:-c只生成目标文件不进行连接,用于对目标文件的分别......
  • 想入坑golang web,向大佬们请教些问题?
    当你准备入坑Go语言的Web开发时,以下是一些常见的问题,你可以向大佬们请教:如何设置和启动一个GoWeb服务器?Go语言有哪些常用的Web开发框架?它们之间有什么区别和优劣势?Go语言中的路由是如何实现的?如何处理不同的HTTP请求方法和URL参数?Go语言如何处理请求和响应,以及如何......
  • 论文阅读: Co-design Hardware and Algorithm for Vector Search
    1.Introduction介绍一下论文背景,向量检索常用于搜索引擎,推荐系统,LLM和科学计算等对应的常用的硬件向量检索方法,IVF-PQ其中IVF:将多个向量聚类,PQ将向量压缩而为了最大化IVF-PQ的效果,也会面临很多的挑战在芯片设计的过程中,会遇到针对六个阶段如何设计合适的微架构?如何将有......
  • WASI support in Go
    原文在这里。由JohanBrandhorst-Satzkorn,JulienFabre,DamianGryski,EvanPhoenix,andAchilleRoussel发布于2023年9月13日Go1.21添加了一个新的端口,通过新的GOOS值wasip1来定位WASI预览1系统调用API。该端口建立在Go1.11引入的现有WebAssembly端口的基础上。We......
  • 构建工具Premake
    构建工具Premake经常用VisualStudio写一些小程序来验证OpenCASCADE的功能,每次创建项目后都配置头文件,库路径,程序运行时还要配置Debug的环境变量,比较麻烦。也尝试过CMake和QMake,都不太理想。CMake学习曲线陡峭一点,还会生成一堆文件。QMake简单些,但是有的选项不支持。直到看到一个......
  • Codeforces Round 764 (Div. 3) B. Make AP
    有三个正整数\(a,b,c\)。需要执行以下操作严格一次:选择任意一个正整数\(m\)并让严格一个\(a,b,c\)之一乘以\(m\)。但不能改变他们的顺序。回答是否可以经过一次操作后使\(a,b,c\)变为等差。分类讨论题:三种情况满足一种即可。(已知\(a,b,c\geq1\))\(ma......
  • 测试行业面临的问题及RunnerGo在工具层面如何解决的
    RunnerGo致力于打造成一款企业级全栈测试平台,旨在实现产品生命周期的闭环管理,帮助企业在整个产品生命周期中确保质量、降低风险,并提供卓越的用户体验。采用了较为宽松的Apache-2.0license开源协议,方便志同道合的朋友一起为开源贡献力量。 目前测试行业所面临的问题场景共享......
  • Kubernetes日志查看工具
    K8SFilebeat+ElasticSearch+Kibana虽然该组合可以满足我们对于服务监控的要求,但是如果只是部署一个内部单服务用的话,未免显得大材小用,而且部署服务还会带来大量的资源消耗。那么有没有简单查看 K8S 中多个 Pod 中的日志工具呢?咳咳咳,那么今天就介绍两款超好用的多容器实时......