【问题标题】:CMake 3.9 now creates "autogen" projects in Visual Studio?CMake 3.9 现在在 Visual Studio 中创建“autogen”项目?
【发布时间】:2018-01-27 13:49:51
【问题描述】:

我们正在使用 CMake、Qt 和 Visual Studio。我们的许多项目都配置为运行 automoc,通过将 AUTOMOC ON 传递给 add_library

我们最近更新到 CMake 3.9.1,Visual Studio 现在为每个 automoc 库显示一个附加项目。例如,我们现在的解决方案中有一个“Core”项目和一个“Core_autogen”项目。

(这发生在 VS2015 和 VS2017 以及 Qt 5.8 和 5.9.1 中)

这会带来一些烦人的后果:

  • 项目数量几乎翻了一番,增加了很多视觉混乱。
  • 通过 UI 构建单个项目时 Automoc 不再运行,这可能会在调试特定项目的构建问题时导致细微的错误。

有谁知道是否有办法恢复 autogen 以前的 CMake 行为?

或者除此之外,有什么方法至少可以减少 autogen 项目的视觉混乱?

【问题讨论】:

  • 也许set_property( GLOBAL PROPERTY USE_FOLDERS ON ) 会有所帮助?
  • 在 CMake gitlab 中查看 issue 17205。它报告了这个问题的_autogen 部分,并链接到一个合并请求,该请求有望解决这个问题(目前针对 3.10.0 版本)。

标签: qt visual-studio-2015 cmake visual-studio-2017


【解决方案1】:

根据 CMake v3.9 文档,您可以使用 AUTOGEN_BUILD_DIR 将生成的文件移动到不同的文件夹。

默认情况下,CMake 使用<dir>/<target-name>_autogen,其中:

<dir>CMAKE_CURRENT_BINARY_DIR<target-name>NAME

或者您可以使用AUTOMOC 属性:

全局属性 AUTOGEN_TARGETS_FOLDER 可用于在 IDE 中将 automoc 目标组合在一起,例如在 MSVS 中。

全局属性AUTOGEN_SOURCE_GROUP 可用于在 IDE 中将 AUTOMOC 生成的文件分组在一起,例如在 MSVS 中。

希望这会有所帮助。

【讨论】:

  • 感谢您的建议,但这并没有多大帮助。 AUTOGEN_TARGETS_FOLDER 设置生成文件(例如 mocs_compilation.cpp)的存储位置。无论如何,CMake 仍然会创建“_autogen”项目。在 3.9 之前,CMake 将 moc 作为项目预构建步骤的一部分运行。现在似乎为每个 automoc 项目创建了一个额外的项目。
【解决方案2】:

这会将所有 autogen 项目收集在一个文件夹中:

set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER AutoMoc)

【讨论】:

    【解决方案3】:

    这是一个回归,应该在 CMake 3.10 中修复。 CMake 错误报告在这里:https://gitlab.kitware.com/cmake/cmake/issues/17205

    【讨论】:

    • CMake 3.22 对我来说同样的问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2013-05-30
    • 2021-10-06
    • 1970-01-01
    相关资源
    最近更新 更多