我正在使用 Visual Studio 2008 处理两个客户项目,其中一个使用 Digia 的 Qt 插件引入的 $(QTDIR) 定义。
安装插件后,我无法构建任何不使用 Qt 插件的解决方案,因为“没有为此项目设置 Qt 版本”。
有没有办法禁用每个解决方案的 Qt 插件,这样它就不会干扰非 Qt 项目中的构建过程?
好吧,我来晚了一点,但我正在更旧的系统上使用旧软件。所以我今天遇到了这个问题。
我认为“停用”不是真正的问题(如果您不需要它,就不要使用它)。但是 QtAddIn 以其非常 NonDRY 不可读的声明搞乱了 .vcxproj
& Co。
<Keyword>Qt4VSv1.0</Keyword>
中的
.vcxproj
文件返回
<Keyword>Win32Proj</Keyword>
.
QtAddIn 仍然已安装并处于活动状态,但现在它不再修改您的项目文件。PRO:您可以遵循自己的约定,并且可以以非常紧凑的形式进行描述。例如:
<ItemGroup Label="my_widget">
<ClCompile Include="src\my_widget.cpp" />
<CustomBuild Include="src\my_widget.hpp">
<AdditionalInputs>$(QtMoc_exe);%(FullPath)</AdditionalInputs>
<Message>Moc%27ing %(Identity) ..</Message>
<Outputs>.\qtgen\%(Filename)-moc.cpp</Outputs>
<Command>"$(QtMoc_exe)" "%(FullPath)" -o ".\qtgen\%(Filename)-moc.cpp" $(QtMoc_flags)</Command>
</CustomBuild>
<CustomBuild Include="src\my_widget.ui">
<AdditionalInputs>$(QtUic_exe);%(AdditionalInputs)</AdditionalInputs>
<Message>Uic%27ing %(Identity)...</Message>
<Outputs>.\qtgen\%(Filename)-ui.h;%(Outputs)</Outputs>
<Command>"$(QtUic_exe)" -o ".\qtgen\%(Filename)-ui.h" "%(FullPath)"</Command>
</CustomBuild>
<ClInclude Include="qtgen\my_widget-ui.h" />
<ClCompile Include="qtgen\my_widget-moc.cpp" />
</ItemGroup>
CON:您必须自己执行此操作,或者让 CMAKE 或其他工具 为您生成此代码。
注意:使用像*.moc.cpp
这样的扩展(而不是
*-moc.cpp
) 你可以让
*.vcxproj.filters
使用模式 - 而不是 单独列出每个文件。
src/my_widget.cpp
和
qtgen/mocs/my_widget.cpp
)这会导致两个目标文件具有相同的名称。 使用
<ObjectFileName>$(IntDir)%(RelativeDir)</ObjectFileName>
和/或 只是不要这样做。