如何减少与使用c++库(QCustomPlot)相关的构建时间?



我正在编写一个Qt6 QWidget应用程序。在我包含QCustomPlot库之后,构建时间真的很长。我想对库做点什么来减少构建时间。

QCustomPlot由两个文件组成:QCustomPlot .h和QCustomPlot .cpp。这取决于库Qt::PrintSupport。

我做了一些实验来分析构建时间问题。我使用QtCreator的模板MainWindow项目,它只有一个没有功能的空窗口。我更关心增量构建时间,所以我构建整个项目,然后在mainwindow.cpp中添加一个换行,然后再次构建并测量增量构建时间。

下面是我得到的。时间是调试或发布构建模式下的增量构建时间。

  1. 创建模板MainWindow项目,添加链接库Qt6::PrintSupport(为了更好地与后面的案例进行比较)

    • 调试2 s
    • 释放2 s
  2. 将qcustomplot.h和qcustomplot.cpp添加到cmakelist中的源文件中。mainwindow.cpp没有#include "qcustomplot.h"

    • 调试46 s
    • 释放3 s
  3. #include "qcustomplot.h"添加到mainwindow.cpp中,不使用任何内容

    • 调试52 s
    • 发布8 s
  4. 在发布模式下构建QCustomPlot作为dll。在原始项目中,使用qcustomplot.dll代替qcusomplot.cpp和Qt::PrintSupport。mainwindow.cpp没有#include "qcustomplot.h"

    • 调试10 s
    • 释放3 s
  5. #include "qcustomplot.h"添加到mainwindow.cpp中,不使用任何内容

    • 调试16 s
    • 发布8 s

从实验数据来看,编译qcustomplot.h大约需要6s,我认为可以通过使用包装器类来暴露更小的接口来避免这个问题。链接阶段似乎也要花费很多时间,特别是在调试构建中。对于一个几乎空无一物的项目来说,调试版本中的10美元仍然太多了。Qt库比QCustomPlot更复杂,但使用Qt库不会增加太多构建时间。为什么用QCustomPlot构建需要这么多时间?我怎样才能减少呢?

库/编译器版本:Qt6.4.0在dll中,mingw64 gcc 11.2.0。QCustomPlot 2.1.1

以下是我认为有用的内容。

  1. 在发布模式下将qcustomplot构建为共享库。链接到共享库而不是在其他项目中使用qcustomplot.cpp。

  2. 使用包装器类和pImpl习惯用法封装qcustomplot.h。或者,从qcustomplot.h中生成一个预编译的头文件。cmake命令target_precompile_headers非常方便。

步骤1大大缩短了链接时间。步骤2减少了头文件的编译时间。在我的计算机上,增量构建时间减少到2~3秒。

您也可以尝试:

  • 使用像Ninja这样的生成器来加速重新编译
  • 使用CCache作为CMAKE_CXX_COMPILER_LAUNCHER

相关内容

  • 没有找到相关文章

最新更新