gpt4 book ai didi

bash - 许多Shell命令架构

转载 作者:行者123 更新时间:2023-12-02 20:55:48 25 4
gpt4 key购买 nike

在工作中,我们使用docker和docker-compose,我们的开发人员需要在本地启动许多容器并导入大型数据库,有许多服务需要一起运行才能使开发成功且容易。
因此,我们将可重用函数定义为make命令,以使代码易于维护,还有另一种方法来定义和重用比make更好的shell命令。
对我们来说,由于网络限制,在本地运行docker是唯一的选择。
我们设法通过在多个make目标后面提取复杂的shell命令来解决此难题,并使开发人员的工作变得更轻松,并且为了拆分控制Docker基础架构和容器的众多make目标,我们决定将目标拆分为多个文件.mk扩展名。
有许多make命令,例如40条,其中一些是低级别的,有些是供开发人员调用以执行某些任务的。

make launch_app
make import_db_script
make build_docker_images
但是最近事情开始变得有点慢,随着 make命令在内部调用其他 make命令,每个 make调用都花费大量时间,因为每个较低级别的 make调用都必须遍历所有已定义的 .mk文件,并进行一些计算,正如我们在运行 make -d时显示的那样,因此它开始增加了可观的开销。
除了make以外,还有没有其他方法可以使用任何方法来管理一组复杂的shell命令,而我们的开发人员仍然可以轻松地调用它们。
提前致谢。

最佳答案

好吧,您始终可以只使用Shell脚本而不是Makefile编写Shell命令。使用 shell 函数, shell 变量等可以对其进行管理。您没有给出使用make构造有多复杂的示例。
StackOverflow并不是一个问诸如“什么是最好的XYZ”之类的开放式问题的地方。因此,我将这个问题视为“如何加快我的makefile”。
对我来说,听起来您的makefile编写得很差。同样,您没有显示任何示例,但是听起来您的规则正在调用许多子make(例如,您的规则食谱运行$(MAKE)等),这意味着调用了许多进程,分析了许多makefile,等等。为什么不这样做您是否只有一个make和use先决条件实例而不是sub-makes来运行其他目标?您仍然可以将makefile拆分为单独的文件,然后使用include ...将它们全部收集到单个make实例中。
另外,如果您不需要自己重建makefile,则应确保禁用可能会尝试执行的内置规则。实际上,如果您仅使用make运行docker程序,则可以禁用所有内置规则并加快处理速度。只需将其添加到您的makefile中:

MAKEFLAGS += -r
(有关此选项的详细信息,请参见 Options Summary)。
预计到达时间
您不会说您使用的是哪个版本的GNU或您正在运行的操作系统。您没有显示正在使用的食谱的任何示例,因此我们可以看到它们的结构。
问题是您的问题“事情很慢”,是不可行的,甚至无法定义。例如,我每天使用的软件有41个makefile,其中包含22,500行(从cmake生成,这意味着它们效率不高:它们是通用的makefile,没有使用GNU make功能)。没有任何实际操作可进行构建的时间(因此,基本上整个时间都是通过解析makefile来完成的),是0.35秒。
在您的注释中,您建议您有10个makefile和50个变量...我无法想象这种大小的makefile会导致任何可检测到的缓慢。考虑到这些信息,我并不感到惊讶, -r并没有太大的不同。
因此,您的特定makefile文件中一定会引起缓慢:缓慢不是make固有的。显然,我们不能仅仅猜测可能是什么。您将不得不对此进行调查。
使用 time make launch_app。这需要多长时间?
现在使用 time make -n launch_app。这将读取所有makefile,但实际上不会运行任何命令。这需要多长时间?
如果 make -n不花费时间,那么问题就不在于make,而在于您编写的配方,而切换到其他工具来运行这些相同的配方将无济于事。
如果 make -n花费大量时间,则makefile中的内容会变慢。您应该检查它的 $(shell ...)以及可能的 $(wildcard ...)的用法;这些就是缓慢发生的地方。您可以在它们周围添加 $(info ...)语句以在它们运行之前和之后获取输出:也许它们运行了很多次。
没有缓慢的事情的具体例子,我们无能为力。

关于bash - 许多Shell命令架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63097665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com