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

C++ 源文件更改会导致重新编译项目的大部分内容,c++,qt,compile-time,moc,C++,Qt,Compile Time,Moc,[更新] 更改特定源文件时,在构建时,项目编译大约需要10分钟。其他源文件的更改或多或少会导致即时构建时间。我认为如果我将更改最多的部分移动到pimpl类中,编译时间就不再受到影响 我不明白为什么会这样。我没有更改类的头文件。标题本身只包含#和并向前声明10个类。当更改没有直接包含的源文件时,有什么原因会导致重新编译(在构建目录中,我看到所有对象文件都重新生成)?奇怪的是,pimpl的工作,然后 下面是类的标题: #ifndef EXPLORER_H #define EXPLORER_H #i

[更新]

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

我不明白为什么会这样。我没有更改类的头文件。标题本身只包含#和并向前声明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
\ifndef EXPLORER\u H
#定义浏览器
#包括
... 下面是10个预先声明的类。。。
类资源管理器:公共QWidget
{
Q_对象
公众:
显式资源管理器(QWidget*parent=0);
~Explorer();
信号:
...    
公众时段:
...
私人:
ExplorerPrivate*p;//pimpl(QObject)
…指向正向声明类的对象的指针
};
#endif//EXPLORER\u H
编辑

  • 具有QtCreator 3.2.1的建筑

  • 将Qt5.3与mingw一起使用

  • 正如我所说的,cpp文件没有包括在内(搜索它)

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

  • Make:mingw32-Make.exe

编译器控制台无休止地重复
g++-c-pipe-fno keep inline dllexport-O2-std=c++0x-frti-Wall-Wextra-feexceptions-mthreads[此处包括标志和目录]
最后类似于
-o objects\moc\u runtimedata.o moc\moc\u runtimedata.cpp
或类似的内容。

QtCreator在启用卷影生成时出现错误。不确定这是否报告给Qt,因为很难复制

当这个影子构建选项被激活(默认)时,IDE有时将无法意识到某些项目是最新的,并且即使源代码没有改变也会构建它们。我经常遇到这样的情况,大型项目有很多.pro文件,在我的情况下,项目不仅是在不应该的时候构建的,而且是在一个无休止的循环中一次又一次地重建的

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

其他经历过这种情况的人: , 或


在这里,人们报道了无休止的循环,你很幸运,你没有因此而结束

什么样的IDE/构建系统?此外,crystal ball说.cpp文件可能会将我
#包含到其他地方的另一个.cpp中。代码不会自动编译。您是如何运行编译器的?“您是如何运行编译器的”编辑是否足够清晰?我刚刚安装了QtCreator,没有更改默认的编译器参数。Qt creator显示每次编译时重新编译的文件数。。。你查过那个数字了吗?请问,你在哪里找到那个数字?在重建未更改文件的“优势”方面,它似乎也经常忘记构建已更改的文件。因此,偶尔的“清理/qmake/rebuild”例行程序:D@ddriver:当然,我也看到了这一点,特别是在修改.ui或.qrc时,它们有时永远不会被重新编译到头文件中…IMHO,dump qmake for anythis project that that that two.T.U.错误、不一致和未记录的功能太多了。QtCreator对cmake的支持很好,请坚持下去。