c++ - 源文件更改导致重新编译项目的大部分

标签 c++ qt compile-time moc

[更新]

当更改特定的源文件时,在构建项目时编译大约需要。 10分钟。其他源文件的更改会导致或多或少的即时构建时间。我想如果我将变化最大的部分移动到 pimpl类,编译时间不再受影响。

我不明白为什么会这样。我没有更改类的头文件。 header 本身只做 #include <QWidget>并转发声明 10 个类。更改未直接包含的源文件时,可能有什么原因导致重新编译(在构建目录中我看到所有目标文件都重新生成)?奇怪的是 pimpl 然后工作......

这是类的标题:

#ifndef EXPLORER_H
#define EXPLORER_H

#include <QWidget>

... here coming 10 forward declared classes ...

class Explorer : public QWidget
{
    Q_OBJECT
public:
    explicit Explorer(QWidget *parent = 0);
    ~Explorer();
signals:
    ...    
public slots:
    ...
private:
    ExplorerPrivate *p; // pimpl (QObject)
    ...pointers to objects of forward declared classes
};

#endif // EXPLORER_H

编辑

  • 使用 QtCreator 3.2.1 构建

  • 将 Qt5.3 与 mingw 结合使用

  • 正如我所说,cpp 文件无处包含(已搜索)

  • qmake.exe project.pro -r -spec win32-g++ "CONFIG+=debug"

  • 制作:mingw32-make.exe

编译器控制台不断重复 g++ -c -pipe -fno-keep-inline-dllexport -O2 -std=c++0x -frtti -Wall -Wextra -fexceptions -mthreads [include flags and directories here]最后是类似 -o objects\moc_runtimedata.o moc\moc_runtimedata.cpp 的东西或类似的。

最佳答案

当启用影子构建时,QtCreator 有一个错误。不确定这是否已报告给 Qt,因为它很难重现。

当此影子构建选项被激活(默认)时,IDE 有时会无法意识到某些项目是最新的,即使源未更改也会构建它们。对于包含大量 .pro 文件的大型项目,我经常遇到这种情况,就我而言,项目不仅在不应该构建的时候构建,而且在无限循环中一次又一次地重建。

即使这很烦人,因为输出文件可能会与源文件混合,并且在 Release/Debug 之间切换总是需要一个干净的构建(因为 Release 和 Debug 文件是在同一个文件夹中生成的),禁用“影子构建”修复问题。

其他遇到这种情况的人: https://forum.qt.io/topic/30086/endless-loop-of-qmake-exe , http://www.qtcentre.org/threads/59963-a-simple-project-with-quot-Infinite-building-quot或者 Qt Creator error endless loop

这里有人报告无限循环,你很幸运你没有结束......

关于c++ - 源文件更改导致重新编译项目的大部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38415997/

相关文章:

c++ - 对文件系统路径 vector 进行排序时,“尝试取消引用尾后迭代器”

windows - 编译 qtHaskell 时出错

c++ - 如何重置 QGraphicsView 中的比例?

c++ - 是否可以使函数对常量参数或变量参数表现不同?

c++ - C++ 的远程开发如何在 Netbeans 中工作?

c++ - Simulink S-Function Builder仅允许一维和二维尺寸。如何为RGB图像选择3-D?

C++,处理后读取和写入同一文件

c++ - 单击不同窗口上的按钮时更改类的参数

rust - 在 Rust 的编译时部分应用?

c++ - 有没有办法让编译器优化对外部函数的多次调用?