2

我在 Windows 上使用 QtCreator,使用 MSVC 编译器(Visual c++ express edition 的编译器)和 qt 4.5.2 开源。

当我修改项目的标题并按全部构建时,实际上没有构建任何内容,只有当我修改 .cpp 文件时,才会编译修改后的 cpp。

这导致每次我必须更改几个 .cpp 文件使用的一些头文件时,我都必须重新构建一个完整的项目。有没有办法避免这种行为?

提前致谢

4

1 回答 1

1

您的头文件是否列在 .pro 文件的 HEADERS 变量中?我认为在 HEADERS 中列出头文件也需要在其中获得 MOC'ed 类。

**[编辑]**没关系,我使用 Linux 上 Qt 4.5.2 SDK 中的 Qt Creator 1.2.1 对此进行了测试,当我“触摸”一个头文件时,它所依赖的 cpps 会重新编译,无论是否标题列在 HEADER 列表中。

在 qmake 生成的 Makefile 中,我的包含相关 h 文件的 cpp 文件有一条规则,明确将 h 文件列为依赖项。不知道 qmake 是如何做到的。我建议查看为您生成的 makefile qmake,并查看您的一个 cpp 文件的规则是什么样的。[/编辑]

[再次编辑,现在离开主题]**通常在调用 gcc 的基于 make 的构建系统中,您通过使用 -M 标志请求 gcc 为您生成 cpps 包含的头文件的依赖关系信息。cl.exe(微软 C++ 编译器)不会生成 .d 文件,无论你问得多么好,因此使用它的 /showincludes 选项有点常见,然后使用脚本解析输出以将其转换为 .d 文件。 d 文件,因此 make 可以包含它(很多人跳过这一步,只是在使用 cl.exe 的基于 make 的构建中没有适当的依赖检查,因为它是一种 PITA)。 然而,我不认为 qmake 做任何类似的事情来获取依赖信息,因为 qmake 正在生成一个生成文件,该文件又调用编译器,并且在这一点上,依赖信息(至少在我查看的生成文件中)很难 -编码。[/编辑]**

于 2009-08-18T18:53:23.567 回答