因此,我有一个基于Makefile的构建系统,我的用户认为它的工作速度太慢。出于这个问题的考虑,让我们将性能定义为弄清楚应该实际执行的时间。
我可以看到一些优化的途径-
make -C
减少去外部Makefile的次数-但是我想首先知道我的瓶颈在哪里。由于不进行概要分析而不进行优化会浪费生命,因此我想问一下:如何配置Makefile?
假设我继承的系统设计得相当好,即它已经实现了交易中最常见的技巧:(主要是)非递归make,ccache,预编译头文件,自动生成的头文件依赖等)。
...而只是抢先一些可能的答案。我知道可能会有比GNU更快速,更好的构建系统-(就我个人而言,我很想知道CMake员工会对Ninja系统提出什么建议)-但不幸的是,交换构建系统并不在行之列。
最佳答案
由于您对Make决定要做什么而不是要做的时间感兴趣,因此您应该查看options for getting Make to not actually do things:
编辑:
我错了。
Make构造DAG,并确定在重建任何目标之前必须重建的目标。因此,一旦开始执行规则,打印配方或触摸文件,我们感兴趣的工作部分就结束了,可观察的时间也变得一文不值了。因此
-n
和-t
选项不好,但是-q
仍然可以用作粗工具。 -d
还将告诉您Make的思考过程;它不会告诉您时间安排,但会指出哪些目标需要考虑很多步骤。
关于optimization - Makefile分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407048/