optimization - Makefile分析

标签 optimization profiling makefile gnu-make

因此,我有一个基于Makefile的构建系统,我的用户认为它的工作速度太慢。出于这个问题的考虑,让我们将性能定义为弄清楚应该实际执行的时间。

我可以看到一些优化的途径-

  • 减少了Makefile的解析次数,并由于包含Makefile片段而重新计算了DAG。
  • 使用make -C减少去外部Makefile的次数
  • 减少变量扩展

  • -但是我想首先知道我的瓶颈在哪里。由于不进行概要分析而不进行优化会浪费生命,因此我想问一下:如何配置Makefile?

    假设我继承的系统设计得相当好,即它已经实现了交易中最常见的技巧:(主要是)非递归make,ccache,预编译头文件,自动生成的头文件依赖等)。

    ...而只是抢先一些可能的答案。我知道可能会有比GNU更快速,更好的构建系统-(就我个人而言,我很想知道CMake员工会对Ninja系统提出什么建议)-但不幸的是,交换构建系统并不在行之列。

    最佳答案

    由于您对Make决定要做什么而不是要做的时间感兴趣,因此您应该查看options for getting Make to not actually do things:

  • -q(问题)将让它简单地决定必须执行的操作,不执行任何操作,不执行任何打印操作,但是返回指示是否必须执行任何操作的退出状态代码。您只需为您感兴趣的任何目标(包括“全部”)计时。
  • -n(无操作)将打印配方,而不是执行它们。看着它们滚动,将使您大致了解Make如何花费时间,并且如果愿意,可以执行一些巧妙的管道技巧来计时该过程。
  • -t(触摸)将使其触摸需要重建的目标文件,而不是实际重建它们。然后,脚本可以查看文件的更新时间,找出较大的差距,并告诉您需要大量考虑的目标。

  • 编辑:

    我错了。

    Make构造DAG,并确定在重建任何目标之前必须重建的目标。因此,一旦开始执行规则,打印配方或触摸文件,我们感兴趣的工作部分就结束了,可观察的时间也变得一文不值了。因此-n-t选项不好,但是-q仍然可以用作粗工具。 -d还将告诉您Make的思考过程;它不会告诉您时间安排,但会指出哪些目标需要考虑很多步骤。

    关于optimization - Makefile分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407048/

    相关文章:

    math - 通过将它们转换为更大的整数数据类型来一次添加整个字节数组是否有效?

    c# - 如何查看在不同计算机上创建的 Visual Studio VSP 文件?

    makefile - 无法使用 nmake 将重定向符号 (>>) 写入文本文件

    java - Java中如何快速判断一个方法是否被重写

    C# 与 C/C++ : do I need to order struct fields manually for best performance?

    profiling - HXCPP Profiler不会创建日志文件

    sql - SQL Server 2012 Express 中的探查器

    linux - 配置 CMake 以遵循符号链接(symbolic link)

    具有多个规则共享相同配方的 Makefile

    c++ - CPU 使用率高