源文件更改导致重新编译项目的大部分内容

时间:2016-07-16 21:53:26

标签: c++ qt compile-time moc

[更新]

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

我不明白为什么会这样。我没有更改类的头文件。标题本身只有#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或类似的那样重复。

1 个答案:

答案 0 :(得分:0)

启用阴影构建时,QtCreator存在错误。不确定这是否报告给Qt,因为它很难再现。

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

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

遇到此事的其他人: https://forum.qt.io/topic/30086/endless-loop-of-qmake-exehttp://www.qtcentre.org/threads/59963-a-simple-project-with-quot-Infinite-building-quotQt Creator error endless loop

在这里,人们报告无休止的循环,你很幸运,你没有最终结果......