源文件更改导致重新编译项目的大部分
Source file changes lead to recompilation of huge parts of project
[已更新]
更改特定源文件时,在构建项目时编译大约需要。 10分钟。其他源文件的更改会导致或多或少的即时构建时间。我想如果我将变化最大的部分移动到 pimpl
class,编译时间将不再受到影响。
我不明白为什么会这样。我没有更改 class 的 header 文件。 header 本身只做 #include <QWidget>
并且转发声明 10 classes。更改未直接包含的源文件时,可能有什么原因导致重新编译(在构建目录中我看到所有 object 文件重新生成)?奇怪的是 pimpl 然后工作...
这里是 class 的 header:
#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 之间的切换总是需要干净的构建(因为发布和调试文件是在同一文件夹中生成的),禁用 "Shadow build" 修复了问题。
遇到此问题的其他人:
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 或
这里有人报告死循环,你很幸运你没有结束......
[已更新]
更改特定源文件时,在构建项目时编译大约需要。 10分钟。其他源文件的更改会导致或多或少的即时构建时间。我想如果我将变化最大的部分移动到 pimpl
class,编译时间将不再受到影响。
我不明白为什么会这样。我没有更改 class 的 header 文件。 header 本身只做 #include <QWidget>
并且转发声明 10 classes。更改未直接包含的源文件时,可能有什么原因导致重新编译(在构建目录中我看到所有 object 文件重新生成)?奇怪的是 pimpl 然后工作...
这里是 class 的 header:
#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 之间的切换总是需要干净的构建(因为发布和调试文件是在同一文件夹中生成的),禁用 "Shadow build" 修复了问题。
遇到此问题的其他人:
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 或
这里有人报告死循环,你很幸运你没有结束......