【问题标题】:Why is my MOC_DIR ignored when generating Visual Studio projects with qmake为什么使用 qmake 生成 Visual Studio 项目时忽略我的 MOC_DIR
【发布时间】:2014-06-05 23:49:47
【问题描述】:

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

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

如果我message($$MOC_DIR),则路径格式正确。但是,当我在 VS 中构建时,moc_&lt;CLASS&gt;.cpp 文件不会在该位置生成,而是与.pro 位于同一目录中。我在编译过程中收到以下警告:

两个或多个名称为 moc_&lt;CLASS&gt;.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 会被忽略?

【问题讨论】:

    标签: visual-studio qt visual-studio-2013 qmake moc


    【解决方案1】:

    使用 Qt5 qmake 生成的其他 VS2013 项目按预期将 moc_&lt;CLASS&gt;.cpp 文件放置在指定位置,所以我怀疑 .pro 中的其他东西在干扰。

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

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

    load(moc)
    QMAKE_MOC += -DBOOST_MPL_IF_HPP_INCLUDED
    

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

    我的.vcxproj 现在看起来应该是这样,我的moc_&lt;CLASS&gt;.cpp 文件现在放置在正确的&lt;BUILD&gt;/debug/moc&lt;BUILD&gt;/release/moc 目录中。

    但是:我仍然收到相同的 MSB8027 构建警告。这似乎是 Visual Studio 中的 known bug。但是,这使情况变得混乱,因为我只是在添加 load(moc) 时才破坏了 moc 位置,但是在引入问题之前我收到了警告,虽然它存在,现在甚至在它修复之后!现在我正在禁用警告;请参阅 Felix Huang 的回答 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多