Qt5 moc没有生成文件

时间:2017-03-09 23:59:58

标签: visual-studio-2015 qt5 moc

我正在使用VS2015为maya制作c ++插件作为动态库,直到现在,我没有使用Qt5,但我现在需要Qt5.6.1的Q_Gadget和Q_Enum功能所以我开始设置我的vs包括qt,一切都在编译,我在我的库中使用任何Qt类没有问题,但是当我尝试使用任何qt的属性系统(Q_GADGET,Q_ENUM等)时,moc似乎没有生成任何文件,我正在使用Qt VS工具2。

我已经读过某个地方,我应该将我的项目转换为Qt项目,但是关于如何做到这一点的解释非常不清楚,我不确定我是否真的可以为我当前的项目做一个大量的文件。

有没有办法设置moc来运行我的所有.h并自动包含生成的文件?

提前致谢。

1 个答案:

答案 0 :(得分:0)

可以使用此页面上提供的帮助修复我的问题:

automatic mocing in visual studio

我们在项目内部使用自定义目标创建一个VS属性文件(.props),然后在ClCompile上加载所有.hpp文件并在其上执行moc.exe

为我的5.6.1项目修改的.props:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <SourceDir>$(ProjectDir)</SourceDir>
    <CppDir>$(SourceDir)/</CppDir>
    <GenDir>$(SourceDir)/Generated</GenDir>
  </PropertyGroup>

  <PropertyGroup>
    <QtDir>D:\Qt\Qt5.6.1\5.6\msvc2015</QtDir>
    <MocExt>hpp</MocExt>
    <Moc>$(QtDir)/bin/moc.exe</Moc>
  </PropertyGroup>

  <Target Inputs="@(QtIncludes)" 
          Name="Moc" 
          BeforeTargets="ClCompile" 
          Outputs="@(QtIncludes->'$(GenDir)/moc_%(Filename).cpp')">
    <Exec Command = "$(Moc) &quot;%(QtIncludes.identity)&quot; -nw -o $(GenDir)/moc_%(Filename).cpp $(MocFlags)"/>
  </Target>
  <Target Name="CreateDirectories" BeforeTargets="Moc">
    <MakeDir
        Directories="$(GenDir)"/>
  </Target>

  <Target Inputs="@(CopyToOutput)"
          Name="CopytoOut"
          Outputs="@(CopyToOutput->'%(DestinationFolder)/%(RecursiveDir)%(Filename)%(Extension)')"
          AfterTargets="Link">
  </Target>
  <ItemDefinitionGroup />
  <ItemGroup>
    <QtIncludes Include="$(ProjectDir)/**/*.$(MocExt)"/>
  </ItemGroup>
</Project>