0

我正在使用 Qt 5.3 生成 Visual Studio 2013 项目qmake。在我的.pro文件中,我有以下行:

MOC_DIR = $$BUILD_DIR/<DEBUG OR RELEASE>/moc

如果 I message($$MOC_DIR),则路径正确形成。但是,当我在 VS 中构建时,moc_<CLASS>.cpp文件不会在该位置生成,而是最终与.pro. 我在编译期间收到以下警告:

两个或多个名称为 的文件moc_<CLASS>.cpp将产生输出到同一位置

这并不奇怪,因为如果我查看生成的内容.vcxproj,我会看到以下内容(不相关的标签/文本已省略...):

<CustomBuild Include="..\include\Class.hpp">
    ...
    <Outputs Condition="...Release...">moc_Class.cpp;%(Outputs)</Outputs>
    ...
    <Outputs Condition="...Debug...">moc_Class.cpp;%(Outputs)</Outputs>
    ...
</CustomBuild>

为什么我的习惯MOC_DIR被忽略了?

4

1 回答 1

0

正如预期的那样,使用 Qt5 生成的其他 VS2013 项目qmakemoc_<CLASS>.cpp文件放置在指定位置,所以我怀疑其中的其他东西在.pro干扰。

我正在使用 Boost (1.55),在将 Boost 添加到项目时,我遇到了这个 SO 问题中描述的问题:link

我在顶部添加了以下几行.pro

load(moc)
QMAKE_MOC += -DBOOST_MPL_IF_HPP_INCLUDED

...这解决了我的宏参数不匹配错误。它还导致了此处描述的错误。由于某种原因在设置load(moc) 之前调用会导致忽略 custom 。如果您在设置后重新排序,一切都会按预期进行。MOC_DIRqmakeMOC_DIRload(moc)MOC_DIR

.vcxproj现在看起来应该,我的moc_<CLASS>.cpp文件现在放置在正确的<BUILD>/debug/moc目录<BUILD>/release/moc中。

但是:我仍然收到相同的MSB8027构建警告。这似乎是 Visual Studio 中的一个已知错误。但是,它混淆了情况,因为我只在添加时破坏了 moc 位置load(moc),但是在引入问题之前我得到了警告,虽然它存在,现在甚至在它修复之后!现在我正在禁用警告;请在此处查看 Felix Huang 的回答。

于 2014-06-05T23:49:47.693 回答