为什么在重建时构建后,源代码中的更改并不总是反映在机器代码中?

ata*_*man 9 c++ qt build

有时当我更改Qt项目中的代码(Qt Creator 2.1.0 with mingw32)时,更改不会在生成后生成的机器代码中反映出来.这种情况主要发生在我更改构造函数中的默认值或方法/构造函数中的参数顺序时.通常,完全重建会修复(但需要几分钟).

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

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

谢谢!

Fra*_*eld 15

通常,在标头更改后,应重建包含该标头的所有源文件.但是,qmake在这方面有点特殊,你需要为当前目录以外的包含文件夹设置DEPENDPATH.例如,如果你有

INCLUDEPATH += somepath_in_my_project
Run Code Online (Sandbox Code Playgroud)

还添加

DEPENDPATH += some_path_in_my_project
Run Code Online (Sandbox Code Playgroud)

只有使用DEPENDPATH,如果some_path_in_my_project中的某些标题发生更改(如果它们包含该标题),则会重建由.pro文件构建的文件!

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

编辑:

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

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

static:unix:TARGETDEPS += path_to_my/somestaticlib.a
static:win32:TARGETDEPS += path_to_my/somestaticlib.lib
Run Code Online (Sandbox Code Playgroud)

编辑编辑:

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

  • DEPENDPATH是我想要的关键词,非常感谢你! (2认同)