打开项目的vcxproj文件
<ClCompile Include="generatedfiles\Debug\moc_XXXX">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
</ClCompile>
ClCompile 项中的ExcludedFromBuild
需要编译的为false,不需要编译的为true
比如上面
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
Release不编译,Debug编译
LNK2001 无法解析的外部符号 "public: virtual int __thiscall XXXXXXXX::qt_metacall(enum QMetaObject::Call,int,void * *)
同样的这个情况也可能是moc文件没编进去检查一下是否被排除了
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(937,5): warning MSB8027: 名为 moc_Timer.cpp 的两个或更多文件将生成到同一位置的输出。这会导致错误的生成结果。 调用的文件是 generatedfiles\Debug\moc_XXXXXX.cpp, generatedfiles\Release\moc_XXXXX.cpp。
这个警告是因为
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
2个都为true