当前位置:  开发笔记 > 编程语言 > 正文

Makefile分享的任何有趣用途?

如何解决《Makefile分享的任何有趣用途?》经验,为你挑选了1个好方法。

"make"不仅对构建编程项目很有用,而且在其他领域似乎还没有得到充分利用.

例如,许多shell脚本可以重写为Makefile,以允许独立的部分并行运行(使用"make -jXX")以保持所有CPU内核的繁忙,并将显式声明的依赖项作为额外的好处,以防万一考虑在shell脚本中重新排序带副作用的一些任务.

你有任何有趣的故事与make/Makefiles的不同寻常的用途分享?您是否使用其他实用程序作为廉价的作业调度程序?



1> 小智..:

Make的并行性对shell脚本特别有用.假设您想获得一整套主机的"正常运行时间"(或基本上执行任何慢速操作).你可以在循环中做到这一点:

cat hosts | while read host; do echo "$host: $(ssh $host uptime)"; done

这有效,但速度很慢.您可以通过生成子shell来并行化:

cat hosts | while read host; do (echo "$host: $(ssh $host uptime)")&; done

但是现在你无法控制你产生的线程数,CTRL-C也不会干净地中断所有线程.

这是Make解决方案:将其保存到文件(例如showuptimes)并标记为可执行文件:

#!/usr/bin/make -f

hosts:=$(shell cat)
all: ${hosts}

${hosts} %:
        @echo "$@: `ssh $@ uptime`"

.PHONY: ${hosts} all

现在运行cat hosts | ./showuptimes将逐个打印正常运行时间.cat hosts | ./showuptimes -j将并行运行它们.调用者可以直接控制并行化程度(-j),也可以通过系统负载(-l)间接指定它.


Nitpick:"./ showuptimes
推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有