最近我从 Qt Software 安装了 VS Addin,并将我的 .pro 项目导入到 VS2008。一般来说,一切正常,只有一个小但令人讨厌的例外。

假设我有一个 file.cpp,其中有一个类声明它是 Q_OBJECT。因此,该文件经过 MOC 处理并生成 moc_file.cpp,并且可在“生成的文件”下的解决方案中使用。到目前为止,一切都很好。

有趣的是,当我更改 file.cpp 中的某些内容(例如添加一行)并使用 Ctrl+S 保存文件时,moc_file.cpp 会从构建中排除(您可以在图标上看到禁止输入标志) )。当我按 F7 构建解决方案时,我遇到了许多典型的链接器错误。为了解决这种情况,我需要转到 moc_file.cpp 的属性并将“从构建中排除”从“是”更改为“否”。然后一切正常。

其他人也有同样的经历吗?难道我做错了什么?

有帮助吗?

解决方案

问题解决了。我发现在我手工制作的.pro文件中描述了我的项目,我将MOC_DIR指定为:

  

MOC_DIR = .moc

将Visual Studio目录导入“生成的文件”后Release和Debug都是一样的。因此,当我的活动配置是Debug时,例如,当我保存文件时,它被排除在构建之外,因为它对于与Release相关的文件是明智的 - 就像rpg和Andrew建议的那样。 将目录更改为.moc \ $(ConfigurationName)后,问题不再出现(我在解决方案中看到每个生成文件的两个版本 - 每个配置一个)。

感谢大家的帮助!

其他提示

实际上,我已找到该功能的解决方案。您必须从GeneratedFiles \ Debug和GeneratedFiles \ Debug(或从其他配置目录)添加BOTH文件。 Qt将从构建中排除不属于当前所选构建类型的所有内容。

是的,我使用最新的VS Addin,我的项目被正确地视为Qt项目。

你的配置设置正确吗?

打开 "调试配置设置 "窗口 设置以下项目

  • “构建命令行” qmake -project & qmake & nmake debug
  • “清理命令” nmake debug-clean
  • “重建命令行” qmake & nmake 调试

对发布配置重复相同的操作

我在 VS2008(VS 2003 也是)中看到了从构建行为中排除的情况,但项目构建正确。当您更改 moc'able 文件时,Qt 将必须重新创建 moc'ed 文件,因为它已过期。

我怀疑Qt的算法是这样的:

  • 检测到该文件已更改
  • 将旧的 moc 文件设置为从构建中排除
  • 向项目中添加一个同名的新文件并将其包含在构建中

查看我的 VS 2003 项目,我可以看到一些 moc_* 文件在项目中包含了两次,一个版本被设置为从构建中排除,另一个则没有。

使用qmake重新创建 .vsproj 文件可能会解决问题。

对于您拥有的每个QObject文件,QT插件为每个构建配置创建一个moc_文件(通常只是Debug和Release)。当您更改当前配置时,您可以看到No entry entry sign从一个文件转到另一个文件 更改.cpp文件时,moc_文件不应更改。只有当你改变.h文件时..所有这些都让我觉得你的配置发生了错误,确实最好的解决办法就是用qmake用这样的东西重新创建它:

qmake -spec win32-msvc2008
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top