广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang构建工具Makefile使用详解
  • 902
分享到

golang构建工具Makefile使用详解

2024-04-02 19:04:59 902人浏览 独家记忆
摘要

目录正文正文 可能是因为编译太简单了,golang 并没有一个官方的构建工具(类似于 java 的 Maven 和 gradle之类的),但是除了编译,我们可能还需要下载依赖,运行测

正文

可能是因为编译太简单了,golang 并没有一个官方的构建工具(类似于 java 的 Maven 和 gradle之类的),但是除了编译,我们可能还需要下载依赖,运行测试,甚至像 easyJSON,protobuf,thrift 这样的工具下载和代码生成,如果没有构建工具,这些工作就会非常麻烦

为了解决这个问题,之前写过一个 everything.sh 的脚本,把所有的操作都封装在这个脚本里面,只需要执行类似于 sh everything.sh dependency 的命令就可以完成对应的工作,大大简化了构建过程,但是也有一个问题,shell 脚本本身的可读性并不是很好,而且对于各个操作之间的依赖不好描述

一次偶然的机会,在 GitHub 上看到有人用 Makefile,就尝试了一下,发现真的非常合适,Makefile 本身就是用来描述依赖的,可读性非常好,而且与强大的 shell 结合在一起,基本可以实现任何想要的功能

下面是我在实际项目中使用的一个 Makefile,支持的功能包括

make build: 编译

make vendor: 下载依赖

make api: 生成协议代码

make json: easyjson 代码生成

make test: 运行单元测试

make benchmark: 运行性能测试

make stat: 代码复杂度统计,代码行数统计

make clean: 清理 build 目录

make deep_clean: 清理所有代码以外的其他文件

make third: 下载所有依赖的第三方工具

make protoc: 下载 protobuf 工具

make glide: 下载 glide 依赖管理工具

make Golang: 下载 golang 环境

make cloc: 下载 cloc 统计工具

make gocyclo: 下载 gocyclo 圈复杂度计算工具

make easyjson: 下载 easyjson 工具

export PATH:=${PATH}:${GOPATH}/bin:$(shell pwd)/third/go/bin:$(shell pwd)/third/protobuf/bin:$(shell pwd)/third/cloc-1.76
.PHONY: all
all: third vendor api json build test stat
build: cmd/rta_server*.go scripts/version.sh Makefile vendor api json
    @echo "编译"
    @rm -rf build/ && mkdir -p build/bin/ && \
    go build -ldflags "-X 'main.AppVersion=`sh scripts/version.sh`'" cmd/rta_server/main.go && \
    mv main build/bin/rta_server && \
    cp -r configs build/configs/
vendor: glide.lock glide.yaml
    @echo "下载 golang 依赖"
    glide install
api: vendor
    @echo "生成协议文件"
    @rm -rf api && mkdir api && \
    cd vendor/gitlab.mobvista.com/vta/rta_proto.git/ && \
    protoc --go_out=plugins=grpc:. *.proto && \
    cd - && \
    cp vendor/gitlab.mobvista.com/vta/rta_proto.git* scripts* | grep -v _test | xargs gocyclo
    @ls internal/*/* | grep -v _test | xargs gocyclo | awk '{sum+=?1}END{printf("总圈复杂度: %s", sum)}'
.PHONY: clean
clean:
    rm -rf build
.PHONY: deep_clean
deep_clean:
    rm -rf vendor api build third
third: protoc glide golang cloc gocyclo easyjson
.PHONY: protoc
protoc: golang
    @hash protoc 2>/dev/null || { \
        echo "安装 protobuf 代码生成工具 protoc" && \
        mkdir -p third && cd third && \
        wget https://github.com/google/protobuf/releases/download/v3.2.0/protobuf-cpp-3.2.0.tar.gz && \
        tar -xzvf protobuf-cpp-3.2.0.tar.gz && \
        cd protobuf-3.2.0 && \
        ./configure --prefix=`pwd`/../protobuf && \
        make -j8 && \
        make install && \
        cd ../.. && \
        protoc --version; \
    }
    @hash protoc-gen-go 2>/dev/null || { \
        echo "安装 protobuf golang 插件 protoc-gen-go" && \
        go get -u github.com/golang/protobuf/{proto,protoc-gen-go}; \
    }
.PHONY: glide
glide: golang
    @mkdir -p ?GOPATH/bin
    @hash glide 2>/dev/null || { \
        echo "安装依赖管理工具 glide" && \
        curl Https://glide.sh/get | sh; \
    }
.PHONY: golang
golang:
    @hash go 2>/dev/null || { \
        echo "安装 golang 环境 go1.10" && \
        mkdir -p third && cd third && \
        wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz && \
        tar -xzvf go1.10.linux-amd64.tar.gz && \
        cd .. && \
        go version; \
    }
.PHONY: cloc
cloc:
    @hash cloc 2>/dev/null || { \
        echo "安装代码统计工具 cloc" && \
        mkdir -p third && cd third && \
        wget https://github.com/AlDanial/cloc/arcHive/v1.76.zip && \
        unzip v1.76.zip; \
    }
.PHONY: gocyclo
gocyclo: golang
    @hash gocyclo 2>/dev/null || { \
        echo "安装代码圈复杂度统计工具 gocyclo" && \
        go get -u github.com/fzipp/gocyclo; \
    }
.PHONY: easyjson
easyjson: golang
    @hash easyjson 2>/dev/null || { \
        echo "安装 json 编译工具 easyjson" && \
        go get -u github.com/mailru/easyjson/...; \
    }

以上就是golang构建工具Makefile使用详解的详细内容,更多关于golang构建工具Makefile的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: golang构建工具Makefile使用详解

本文链接: https://www.lsjlt.com/news/120971.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang构建工具Makefile使用详解
    目录正文正文 可能是因为编译太简单了,golang 并没有一个官方的构建工具(类似于 java 的 maven 和 gradle之类的),但是除了编译,我们可能还需要下载依赖,运行测...
    99+
    2022-11-11
  • Linux 自动化构建工具make/Makefile的使用详解
    目录一、单个文件的编译1、写法一:逐个生成.i、.s、.o文件,最后再生成 test执行文件2、 写法二:一步到位,直接通过 test.c 生成 test 执行文件(推荐)3、 Makefile自动清理二、多个文件的编译...
    99+
    2022-06-05
    linux自动化构建工具 linux make Makefile
  • Linux自动化构建工具make和Makefile详解
    目录一、make和Makefile的作用二、make和Makefile的使用清理一、make和Makefile的作用 在一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 ...
    99+
    2023-04-19
    Linux自动化构建工具 Linux make Makefile 自动化构建工具make 自动化构建工具Makefile
  • Makefile构建Golang项目示例详解
    目录背景创建项目并运行添加 Makefile 文件Makefile概念变量使用 Makefile 自动化任务背景 构建和测试大型项目时都会很耗时,且容易出错。开发者在开发过程中需要不...
    99+
    2022-11-11
  • 软件构建工具makefile基础讲解
    概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员...
    99+
    2022-11-12
  • Linux下的自动化构建工具之make/makefile的用法详解
    目录一、make和makefile的区别二、makefile的原理1、make的原理详解2、临时文件的清理3、文件的三个时间三、makefile的推导规则四、实现一个进度条1、缓冲区问题2、实现倒计时程序3、进度条的实现...
    99+
    2022-10-28
  • Linux自动化构建工具make和Makefile如何使用
    这篇文章主要介绍“Linux自动化构建工具make和Makefile如何使用”,在日常操作中,相信很多人在Linux自动化构建工具make和Makefile如何使用问题上存在疑惑,小编查阅了各式资料,整理出...
    99+
    2023-05-25
    linux make makefile
  • Linux自动化构建工具make和Makefile怎么使用
    这篇文章主要讲解了“Linux自动化构建工具make和Makefile怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux自动化构建工具make和Makefile怎么使用”吧!一...
    99+
    2023-07-06
  • Linux自动化构建工具Makefile与make怎么用
    这篇文章主要介绍“Linux自动化构建工具Makefile与make怎么用”,在日常操作中,相信很多人在Linux自动化构建工具Makefile与make怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”L...
    99+
    2023-06-28
  • Golang如何快速构建一个CLI小工具详解
    目录如何Golang快速构建一个CLI小工具先上效果那么如何实现呢?如何Golang快速构建一个CLI小工具 在现实开发的过程中,大家会发现很多开源的框架都会有着自己的一个CLI工具...
    99+
    2022-11-11
  • 使用Go构建一款静态分析工具Owl详解
    目录介 绍原 理快速开始如何使用SDK方式其他介 绍 Owl是一款开源项目依赖分析工具,可以快速在指定的项目目录下查找符合某些特征的源代码文件或者依赖文件。为何开发了这款工具?例如很...
    99+
    2022-11-13
  • 详解如何使用Bazel构建Golang程序
    目录使用Bazel构建Golang程序从头开始一个 Golang 项目将现有项目转换为 Bazel 构建密封测试(Hermetic tests)使用Bazel构建Golang程序 在...
    99+
    2023-01-28
    Bazel构建Golang程序 Golang Bazel
  • Oracle_oswbba工具使用详解
    OS Watcher Black Box 一.OS WatcherBlack Box说明 OSWatcher是Oracle提供的一个用于操作系统监控的工具包。 OS Watcher B...
    99+
    2022-10-18
  • 怎么使用java构建工具gradle
    本篇内容主要讲解“怎么使用java构建工具gradle”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用java构建工具gradle”吧!  现在我们都在谈领域驱动设计,Gradle本身的领...
    99+
    2023-06-25
  • React项目搭建与Echars工具使用详解
    目录一、React项目快速搭建1、新建文件夹2、直接在对应目录输入 cmd ,打开终端3、执行指令完成React应用建立二、React项目结构和分析1、删除多于文件,使得结构清晰2、...
    99+
    2023-03-20
    React使用Echars React Echars工具使用
  • Hutool工具类使用详解
    当今,Java开发者需要处理各种各样的任务,这包括但不限于:日期操作、加密算法、文件操作、Excel数据处理、网络请求等等。而在处理这些任务时,为了提高效率、降低开发难度和复杂度,我们需要借助一些工具类库。Hutool是一个Java工具类库...
    99+
    2023-08-25
    java 开发语言
  • Go依赖注入DI工具wire使用详解(golang常用库包)
    目录什么是依赖注入第一次编写mysql操作类:第二次编写mysql操作类:第三次编写mysql操作类:何时使用依赖注入wire 概念说明provider 和 injectorprov...
    99+
    2022-11-13
  • Java构建工具gradle怎么安装使用
    本文小编为大家详细介绍“Java构建工具gradle怎么安装使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java构建工具gradle怎么安装使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。学习Java的...
    99+
    2023-06-27
  • GOLang IO接口与工具使用方法讲解
    目录一、io包中接口的好处和优势1.1拷贝数据的函数二、在io包中io.Reader的扩展接口和实现类型2.1 io.Reader的扩展接口2.2 io.Reader接口的实现类型2...
    99+
    2023-03-19
    GO IO接口 GO工具
  • Vue3构建WebComponents使用详解
    目录引言构建 Web Components属性事件插槽子组件样式问题方法总结引言 有时候想写一个无关框架组件,又不想用原生或者 Jquery 那套去写,而且还要避免样式冲突,用 We...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作