如何创建一个自记录的Makefile

My new favorite way to completely underuse a Makefile? Creating personalized, per-project repository workflow command aliases that you can check in.

我最喜欢的完全没用Makefile的方法? 创建个性化的按项目存储库工作流命令别名,您可以检入。

Can a Makefile improve your DevOps and keep developers happy? How awesome would it be if a new developer working on your project didn’t start out by copying and pasting commands from your README? What if instead of:

Makefile可以改善您的DevOps并使开发人员满意吗? 如果一个新的开发人员没有通过复制和粘贴自述文件中的命令来开始工作,那将有多棒? 如果不是:

pip3 install pipenv
pipenv shell --python 3.8
pipenv install --dev
npm install
pre-commit install --install-hooks
# look up how to install Framework X...
# copy and paste from README...
npm run serve

… you could just type:

…您可以输入:

make start

make start

…and then start working?

…然后开始工作?

有所作为 (Making a difference)

I use make every day to take the tedium out of common development activities like updating programs, installing dependencies, and testing.

我每天都会使用make来消除繁琐的开发活动,例如更新程序,安装依赖项和测试。

To do all this with a Makefile (GNU make), we use Makefile rules and recipes. Similar parallels exist for POSIX flavor make, like Target Rules. Here’s a great article on POSIX-compatible Makefiles.

为了使用Makefile(GNU make)来完成所有这些工作,我们使用Makefile规则和配方 。 POSIX风味制造也存在类似的相似之处,例如目标规则 。 这是一篇有关POSIX兼容Makefile的好文章 。

Here’s some examples of things we can make easier (sorry):

这里的有些东西在例子中,我们可以make更容易(不好意思):

update: ## Do apt upgrade and autoremovesudo apt update && sudo apt upgrade -ysudo apt autoremove -yenv:pip3 install pipenvpipenv shell --python 3.8install: ## Install or update dependenciespipenv install --devnpm installpre-commit install --install-hooksserve: ## Run the local development serverhugo serve --enableGitInfo --disableFastRender --environment developmentinitial: update env install serve ## Install tools and start development server

Now we have some command-line aliases that you can check in. Great idea! If you’re wondering what’s up with that weird ## comment syntax, it gets better.

现在我们有了一些命令行别名,您可以签入。好主意! 如果您想知道奇怪的##注释语法有什么用,它会变得更好。

一个自记录的Makefile (A self-documenting Makefile)

Aliases are great, if you remember what they all are and what they do without constantly typing cat Makefile. Naturally, you need a help command:

别名很棒,如果您记住它们的全部含义而无需不断输入cat Makefile就能做什么。 当然,您需要一个help命令:

.PHONY: help
help: ## Show this help@egrep -h '\s##\s' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

With a little command-line magic, this egrep command takes the output of MAKEFILE_LIST, sorts it, and uses awk to find strings that follow the ## pattern. It then prints a helpful formatted version of the comments.

使用一点命令行魔术,此egrep命令获取MAKEFILE_LIST的输出,对其进行排序,然后使用awk查找遵循##模式的字符串。 然后,它会打印出有用的格式化的注释版本。

We’ll put it at the top of the file so it’s the default target. Now to see all our handy shortcuts and what they do, we just run make, or make help:

我们将其放在文件的顶部,因此它是默认目标。 现在,要查看我们所有方便的快捷方式及其作用,我们只需运行makemake help

help                 Show this help
initial              Install tools and start development server
install              Install or update dependencies
serve                Run the local development server
update               Do apt upgrade and autoremove

Now we have our very own personalized and project-specific CLI tool!

现在,我们有了自己的个性化和特定于项目的CLI工具!

The possibilities for improving your DevOps flow with a self-documenting Makefile are almost endless. You can use one to simplify any workflow and produce some very happy developers.

使用自记录的Makefile改善DevOps流程的可能性几乎是无限的。 您可以使用它来简化任何工作流程并产生一些非常满意的开发人员。

翻译自: https://www.freecodecamp.org/news/self-documenting-makefile/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BZOJ3262】陌上花开

CDQ分治模板 注意三元组完全相等的情况 1 #include<bits/stdc.h>2 using namespace std;3 const int N100010,K200010;4 int n,k,cnt[N],ans[N];5 struct Node{6 int a,b,c,id;7 bool operator<(const Node& k)const{8 if(bk.b&&ck.c) re…

Spring+jpaNo transactional EntityManager available

2019独角兽企业重金招聘Python工程师标准>>> TransactionRequiredException: No transactional EntityManager availableEntityManager执行以下方法(refresh, persist, flush, joinTransaction, remove, merge) 都需要需要事务if (transactionRequiringMethods.cont…

python项目构建_通过构建4个项目来学习Python网络

python项目构建The Python programming language is very capable when it comes to networking. Weve released a crash course on the freeCodeCamp.org YouTube channel that will help you learn the basics of networking in Python.当涉及到网络时&#xff0c;Python编程…

164. 最大间距

164. 最大间距 给定一个无序的数组&#xff0c;找出数组在排序之后&#xff0c;相邻元素之间最大的差值。 如果数组元素个数小于 2&#xff0c;则返回 0。 示例 1: 输入: [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差…

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 screen工具

通过后台服务的方式在远程主机上建立一个rsync的服务器&#xff0c;在服务器上配置好rsync的各种应用&#xff0c;然后将本机作为rsync的一个客户端连接远程的rsync服务器。在128主机上建立并配置rsync的配置文件/etc/rsyncd.conf,把你的rsyncd.conf编辑成以下内容&#xff1a;…

01_Struts2概述及环境搭建

1.Struts2概述&#xff1a;Struts2是一个用来开发MVC应用程序的框架。Struts2提供了web应用程序开发过程中一些常见问题的解决方案;对用户输入的数据进行合法性验证统一的布局可扩展性国际化和本地化支持Ajax表单的重复提交文件的上传和下载... ...2.Struts2相对于Struts1的优势…

315. 计算右侧小于当前元素的个数

315. 计算右侧小于当前元素的个数 给定一个整数数组 nums&#xff0c;按要求返回一个新数组 counts。数组 counts 有该性质&#xff1a; counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例&#xff1a; 输入&#xff1a;nums [5,2,6,1] 输出&#xff1a;[2,1…

IOS上传文件给java服务器,返回报错unacceptable context-type:text/plain

IOS上传文件给java服务器&#xff0c;返回报错unacceptable context-type&#xff1a;text/plain response返回类型不对 RequestMapping(value "uploadMultiFiles", method RequestMethod.POST, produces"application/json;charsetUTF-8") 使用produces指…

Python爬虫框架Scrapy学习笔记原创

字号scrapy [TOC] 开始 scrapy安装 首先手动安装windows版本的Twisted https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted pip install Twisted-18.4.0-cp36-cp36m-win_amd64.whl 安装scrapy pip install -i https://pypi.douban.com/simple/ scrapy windows系统额外需要…

600. 不含连续1的非负整数

600. 不含连续1的非负整数 给定一个正整数 n&#xff0c;找出小于或等于 n 的非负整数中&#xff0c;其二进制表示不包含 连续的1 的个数。 示例 1:输入: 5 输出: 5 解释: 下面是带有相应二进制表示的非负整数< 5&#xff1a; 0 : 0 1 : 1 2 : 10 3 : 11 4 : 100 5 : 101…

高可用性、负载均衡的mysql集群解决方案

2019独角兽企业重金招聘Python工程师标准>>> 一、为什么需要mysql集群&#xff1f; 一个庞大的分布式系统的性能瓶颈中&#xff0c;最脆弱的就是连接。连接有两个&#xff0c;一个是客户端与后端的连接&#xff0c;另一个是后端与数据库的连接。简单如图下两个蓝色框…

Django的model查询操作 与 查询性能优化

Django的model查询操作 与 查询性能优化 1 如何 在做ORM查询时 查看SQl的执行情况 (1) 最底层的 django.db.connection 在 django shell 中使用 python manage.py shell>>> from django.db import connection >>> Books.objects.all() >>> connect…

887. 鸡蛋掉落

887. 鸡蛋掉落 给你 k 枚相同的鸡蛋&#xff0c;并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 0 < f < n &#xff0c;任何从 高于 f 的楼层落下的鸡蛋都会碎&#xff0c;从 f 楼层或比它低的楼层落下的鸡蛋都不会破。 每次…

678. 有效的括号字符串

678. 有效的括号字符串 给定一个只包含三种字符的字符串&#xff1a;&#xff08; &#xff0c;&#xff09; 和 *&#xff0c;写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则&#xff1a; 任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应…

Faster R-CNN代码例子

主要参考文章&#xff1a;1&#xff0c;从编程实现角度学习Faster R-CNN&#xff08;附极简实现&#xff09; 经常是做到一半发现收敛情况不理想&#xff0c;然后又回去看看这篇文章的细节。 另外两篇&#xff1a; 2&#xff0c;Faster R-CNN学习总结 这个主要是解释了18,…

剥开比原看代码09:通过dashboard创建密钥时,前端的数据是如何传到后端的?

2019独角兽企业重金招聘Python工程师标准>>> 作者&#xff1a;freewind 比原项目仓库&#xff1a; Github地址&#xff1a;https://github.com/Bytom/bytom Gitee地址&#xff1a;https://gitee.com/BytomBlockchain/bytom 在前面一篇文章&#xff0c;我们粗略的研究…

面试题 17.24. 最大子矩阵

面试题 17.24. 最大子矩阵 给定一个正整数、负整数和 0 组成的 N M 矩阵&#xff0c;编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2]&#xff0c;其中 r1, c1 分别代表子矩阵左上角的行号和列号&#xff0c;r2, c2 分别代表右下角的行号和列号。若有多个…

js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题...

js模拟form表单提交数据, js模拟a标签点击跳转&#xff0c;避开使用window.open引起来的浏览器阻止问题 js模拟form表单提交数据源码&#xff1a; /** * js模拟form表单提交 * param {object} 参数对象 * url 必填 提交地址 * methond 选填 默认post 提交方…

004. ES6之函数的扩展

2019独角兽企业重金招聘Python工程师标准>>> 1. 函数参数的默认值 ES6 允许为函数的参数设置默认值&#xff0c; function log(x, y World) {console.log(x, y); }log(Hello) // Hello World log(Hello, China) // Hello China log(Hello, ) // Hello// 1. 参数变量…

数据结构 | 链表:1097 删除重复元素

代码提交之后一直说段错误。我以为是数组开的不够大&#xff0c;但是随着数组一点一点开大&#xff0c;还是有一个case没有AC。最终我发现&#xff1a;是有个边界条件没有考虑到 void printList(const vector<Node>& a){if(!a.size()) return;FF(i,a.size()-1){print…