gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:28:24 26 4
gpt4 key购买 nike

有时,当我在我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com