c++ - 为什么在重建工作时构建后源代码的更改并不总是反射(reflect)在机器代码中?

标签 c++ qt build

有时,当我在我的 Qt 项目(带有 mingw32 的 Qt Creator 2.1.0)中更改代码时,这些更改不会在构建后反射(reflect)在生成的机器代码中。这主要发生在我更改构造函数中的默认值或方法/构造函数中的参数顺序等内容时。通常,完全重建可以解决这个问题(但需要几分钟)。

我通过在构建之前删除生成的可执行文件或库来帮助自己,这似乎在大多数时候都有帮助。这是否意味着链接目标文件时出现问题?

我来自 java/.net,我习惯了不同的行为。如果有人能向我解释我做错了什么和/或指出一些相关文章,我会很高兴。

谢谢!

最佳答案

通常,在头文件发生变化后,包括该头文件在内的所有源文件都应该被重建。 但是qmake在这方面有点特殊,需要为当前目录以外的include文件夹设置DEPENDPATH。例如,如果你有

INCLUDEPATH += somepath_in_my_project

同时添加

DEPENDPATH += some_path_in_my_project

仅使用 DEPENDPATH,如果 some_path_in_my_project 中的某些 header 发生更改(如果它们包含该 header ),则由 .pro 文件构建的文件将被重建!

我建议为每个 INCLUDEPATH 行添加一个相同的 DEPENDPATH 行,除非您包含一些您不希望更改的系统目录。

编辑:

与 qmake 静态链接时存在类似的问题:如果静态库 foo.a 更改,则不会重新链接针对它的二进制文件。这是 QMake 中的一个错误,没有生成正确的依赖项。

我在以前的项目中找到的解决方法:

static:unix:TARGETDEPS += path_to_my/somestaticlib.a
static:win32:TARGETDEPS += path_to_my/somestaticlib.lib

编辑编辑:

从某个时候开始(Qt 5?),上面的代码应该使用 POST_TARGETDEPS 而不是 TARGETDEPS。

关于c++ - 为什么在重建工作时构建后源代码的更改并不总是反射(reflect)在机器代码中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5470438/

相关文章:

C++11 相当于 python 的 x, y, z = array

c++ - 如何检测 QImage 消耗最少 RAM 的足够格式(数据类型)?

html - 在 Qt 中将 Unicode 字符编码为 HTML

azure - Azure 应用程序服务的构建日志在哪里?

C++重载虚拟+运算符

C++ 限制泛型中的类型(和指针问题)

cocoa - Mac 应用程序禁用 Xcode "Build and Archive"按钮。为什么?

build - MSBuild:并行构建和 .Net 项目

c++ - 链接到某物是什么意思?

Qt:枚举桌面上的 Windows