什么是gsmake

gsmake是一个类似于gradle的自动构建工具,使用go语言开发:

  1. gsmake是一个包管理/下载工具;
  2. 每个包有它全局唯一的包名,以及版本号;
  3. 包可以定义一系列的任务(task),任务支持由golang语言编写;
  4. 包可以相互引用,但是不能出现引用环;
  5. gsmake能够容易的执行包定义的任务;

通过上面描述不难看出,gsmake不仅仅可以用替代make管理golang代码。通过编写一系列插件 支持c/c++工程管理也是可行的,甚至你用它来编写一本《gsmake入门》的书也是有可能的这个 例子在介绍maven/gradle的时候经常提到,总之一句话你可以把它想象成maven/gradle的golang 实现版。

为啥重新发明轮子

  1. 程序员通病,自己的轮子还是要更圆些;
  2. 我们的大golang自己的包管理工具,不支持版本化;有一些三方的库例如:gopm 试图解决这个问题,但是我觉得解决得还不够好;
  3. 基于jvm的maven/gradle太重量级了,一个jvm就要200M;
  4. 去中心化——maven/gradle需要中心仓库——gsmake不需要, 理论上可以将包托管在任何代码托管网站;现阶段支持下列常用网站:github/bitbucket/gopkg.in

gsmake是怎么工作的?

gsmake一般工作流程如下:

由于golang是一个编译型语言所以需要一个编译的过程,将上一步生成的task调用粘合剂代码与用户 定义的task代码一起编译为一个程序,然后运行之;

task

task具有以下属性

  1. task名称全局有效;
  2. task之间可以有由来关系,但是不能出现环;
  3. 不同包定义的task可以有相同的名称,以及不同的前置依赖task;
  4. gsmake将不同包但相同名称的task任务看做同一个task的多个执行体;

gsmake接收一个task名称并执行它——在内部gsmake需要一个任务排序的过程。被依赖的task需要先执行:

通过上面的描述我们知道,用户定义的task组成了一个有向无环图,我们知道对于这种数据结构的排序其实就是一个简单的拓扑排序的过程,gsmake的这部分实现在这里

安装

golang的开发环境是必备的,这里就不累述了:

  1. go get github.com/gsmake/gsmake/cmd/gsmake,这一步将安装一个临时的gsmake可执行 文件到${GOPATH}/bin目录下,不要忘记添加该路径到系统PATH
  2. 进入${GOPATH}/src/github.com/gsmake/gsmake,执行./gsmake setup ${安装目录}
  3. 进入比较长的等待——通过gsmake再一次编译gsmake本身,并通过setup任务安装gsmake, 这是一个自举的过程。自此我们就可以丢开gopath,以及golang的版本陷阱愉快的玩耍了。

一个简单的示例

看gsmake项目本身吧,它会自己管理自己:)猛戳这里!!!!! PS:请忽略我的英文readme.md,你懂得:)

转载于:https://www.cnblogs.com/yayanyang/p/4501132.html

gsmake —— golang版gradle相关推荐

  1. LeetCode77. 组合Golang版

    LeetCode77. 组合Golang版 1. 问题描述 给定两个整数 n 和 k,返回 1 - n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4] ...

  2. 网易云API Golang版开发历程

    网易云API Golang版开发历程 原项目(node.js) 网易云音乐 API 本项目 (golang) 网易云音乐 API api文档 请不要用于商业用途 想法的开始 事情的开始还是一开始在B站 ...

  3. GoLang版的RPC简介

    在说以太坊的RPC前,先来解释RPC是什么. RPC简介 RPC全称是Remote Procedure Call,即远程过程调用.它可用于相同编程语言之间调用,也可用于不同编程语言间的调用.本文以go ...

  4. [Golang] kafka集群搭建和golang版生产者和消费者

    一.kafka集群搭建 至于kafka是什么我都不多做介绍了,网上写的已经非常详尽了. (没安装java环境的需要先安装 yum -y install java-1.8.0-openjdk*) 1. ...

  5. 代码写春联【百度AI智能春联Golang版】

    工程结构 ├─cmd // 程序入口 ├─img // 图片 ├─lib // 依赖库 │ └─font │ └─config ├─res // 输出 └─util // 工具 cmd package ...

  6. 支付宝手机网页支付之golang版

    本文章主要是通过golang实现了支付宝手机网页支付的简单封装,封装的基本都是请求的必传参数,如果需要其他参数,可以自己修改BizContent结构体来满足自己的需求. 封装的文件大体分为4个文件: ...

  7. golang版try..catch..

    defer func() {if err := recover(); err != nil {fmt.Printf("err:%v\n", err)} }()panic(" ...

  8. 微信jssdk ajax 获取签名,【Golang版】微信access_token、jsapi_ticket、signature签名算法生成示例,开箱即用...

    # WXToken 项目地址:[https://github.com/henson/WXToken](https://github.com/henson/WXToken) 因为手上有一个项目需要用到微 ...

  9. 重温一遍数据结构之单链表(golang版)

    说明 上一篇说的是线性表中的顺序存储结构,他的读取复杂度虽然是o(1),但是它的缺点也很明显,插入和删除需要移动很多元素,而且需要分配一块连续的内存区域 线性表之单链表 单链表在一定程度上解决了一部分 ...

最新文章

  1. mysql备份恢复实验
  2. OpenGL 三角形要点总结
  3. android天气查询(一)websevice之ksoap2软件包的使用
  4. 题解 UVA10328 【Coin Toss】
  5. client copy sap论坛上看到的
  6. Teleport 开源堡垒机的使用
  7. Bootstrap 3: 使用注意box-sizing细节及解决方法
  8. python 二维矩阵及转byte知识点
  9. 笔记(4)——Analyzing Communities and Their Evolutions in Dynamic Social Networks
  10. bzero 和 memset 函数对比
  11. 云联惠认证身份_在秘乐短视频上实名认证了,输入了手机号,身份证号码,姓名,人脸识别,会被网贷吗?...
  12. 机房服务器配置方案文件,机房搬迁实施方案模版
  13. 如何正确生成Word目录
  14. 玩客云armbian挂载硬盘
  15. 四层七层负载均衡区别
  16. cd linux menu.lst,Windows 7 中使用 grldr + menu.lst 引導 linux系統和win7.
  17. 《大型网站技术架构-核心原理与案例分析》(李智慧 著)第2章-大型网站架构模式
  18. 服务器安全文件,文件服务器安全防护系统-虹安 - 数据防泄密,文档加密,源代码防泄密,数据防泄漏,DLP数据防泄密整体解决方案提供商...
  19. Mysql主从复制+读写分离
  20. Codeforces Round #645 (Div. 2) / contest 1358

热门文章

  1. 记一次fastjson转jackson的生产事故
  2. html中h3的样式,比较好看的css自定义样式(标题 h1 h2 h3)
  3. 现代微波滤波器结构与设计_高功率射频及微波无源器件中的考虑和限制
  4. Q4,IT人从来没输过!
  5. 2020 有哪些不容错过的前端技术趋势?
  6. 基于 K8s 做应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?
  7. java一年包装_浅谈Java的包装类
  8. mysql探活_MYSQL探索
  9. Mysql小练习(2)
  10. java中struts2日期_Struts2中Date日期转换的问题