Visual Studio 2008中的Qt4 - moc-ed文件被排除在构建之外?

时间:2009-07-29 13:28:10

标签: visual-studio-2008 qt

最近我从Qt Software安装了VS Addin,并将我的.pro项目导入VS2008。 一般来说,一切都很好,只有一个小而烦人的例外。

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

有趣的是,当我在file.cpp中更改某些内容(例如添加一行),并使用Ctrl + S保存文件时,moc_file.cpp将从构建中排除(您可以看到没有条目的符号在图标上)。当我按F7构建解决方案时,我遇到了许多典型的链接器错误。为了解决这个问题,我需要转到moc_file.cpp的属性,并将“Exclude from build”从“Yes”更改为“No”。一切正常。

其他人是否经历过同样的事情?我做错了吗?

6 个答案:

答案 0 :(得分:7)

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

  

MOC_DIR = .moc

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

感谢大家的帮助!

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您是否正确设置了配置?

打开“调试配置设置”窗口 如下所述设置以下项目:

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

对发布配置

重复相同的操作

答案 4 :(得分:0)

我已经看到VS2008中的构建行为被排除在外(VS 2003也是如此),但项目构建正确。当您更改moc'able文件时,Qt将不得不重新创建moc'ed文件,因为它已过期。

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

  • 检测到该文件已更改
  • 将旧的moc文件设置为从build
  • 中排除
  • 将新文件添加到具有相同名称的项目中,并将其包含在构建

查看我的VS 2003项目,我可以看到项目中包含两个moc_ *文件,一个版本设置为从构建中排除,另一个版本不包括。

答案 5 :(得分:0)

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

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

qmake -spec win32-msvc2008