【问题标题】:CMake Zero Check fails to detect updates in CMakeLists.txt files for Xcode generatorCMake 零检查无法检测 Xcode 生成器的 CMakeLists.txt 文件中的更新
【发布时间】:2019-03-15 13:56:41
【问题描述】:

背景

我有一个可以在 Windows 上完美运行的大型项目。 当在CMakeLists.txt 中应用一些更改并构建项目时,Visual Studio 项目会正确更新。

Xcode 版本:10.0 (10A255) 或 10.1 (10B61)(在不同机器上测试)。

CMake 版本:3.12.2 或 3.13.1

问题

在 Mac OS 上为 Xcode 构建相同项目时会出现问题。 配置 CMake 后:

cmake .. -G Xcode

生成的项目工作正常,一切正常,测试通过。

现在,当 CMakeLists.txt 文件被修改(开发项目或从存储库获取新更改时)并选择 ZERO_CHECKBUILD_ALL 时,构建不会导致 Xcode 项目更新。 调用 cmake . 也不会检测到更改。

解决方法

我发现的最佳解决方法是删除 everything 两个文件:cmake_install.cmakeCMakeCache.txt。然后重新运行生成项目cmake .. -G Xcode的命令。
在这种情况下,整个检测从头开始重做,但至少构建不会从零开始(未更改的文件不会重新编译)。

这很痛苦,因为必须完成大量手动工作,并且必须重新创建项目,这很耗时。

提示

在以前的一些项目中,我遇到了类似的问题,但只有在 maven 检测到依赖项的更新时才会发生,所以很少发生。当它发生时,我只是打电话给touch CMakeLists.txt 并再次构建,这个解决方法很好。此解决方案不适用,因为每个构建都有此问题。

我怀疑 protobuf 生成过程有问题,但是当我禁用它时,问题仍然存在。

我试图通过创建简单的项目文件来提供完整的最小示例,但我无法重现该问题。对于所有其他项目,它都可以正常工作,因此系统配置不是问题。

问题

运行cmake时如何调试项目生成过程以查找此问题的根源?

这是一个已知问题吗?

是否有更好的解决方法不会导致完全重建重新生成项目文件(这也涉及检测系统功能)?

【问题讨论】:

  • 这很奇怪,我从来没有遇到过这个问题。几乎每次我在项目中更改 CMakeLists.txt 时,我都会得到“已取消”状态。有时,它甚至会“失败”,然后我使用 GUI 生成项目并按照我的预期重新构建项目。
  • 这个问题可能与gitlab.kitware.com/cmake/cmake/issues/14297有关吗?你用什么版本的cmake?
  • @user1244932 很有趣,但事实并非如此。首先,我的其他 CMake 项目在任何情况下都可以正常工作,即使我选择“ALL_BUILD”,该项目也无法正常工作。
  • @MarekR 你能提供你的 CMake 和 XCode 版本吗?
  • @Antwane:问题已更新。

标签: c++ xcode cmake


【解决方案1】:

这是一个已知问题吗?

在 CMake Discourse 上,Craig Scott(CMake 维护者之一)评论了这个 bug 的一个变体,作为 Xcode 的已知架构限制:

使用 Xcode 生成器,目标依赖于 ZERO_CHECK 目标,如果发生变化,它会自动为您重新运行 cmake。但问题是该运行中的其余构建仍然使用 cmake . 运行之前的旧细节。如果您再次构建,则会重新构建任何细节已更改的内容,但如果您知道有关项目已更改的某些内容,则首先明确地重新运行 cmake . 会更加健壮,并且可能会避免更多不必要的重建。

-- https://discourse.cmake.org/t/documented-criteria-for-build-correctness/3087/2?u=alex

鉴于此,您关于“调用 cmake . 未检测到更改”的评论很奇怪,但可能是旧的 CMake 版本(如您在提出此问题时使用的 3.12 和 3.13)存在错误此后已修复。它也可能是我们只能猜测的特定于项目的东西。缺少CMAKE_CONFIGURE_DEPENDS 目录属性?有一个糟糕的set(... CACHE ... FORCE) 电话?不能说……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    相关资源
    最近更新 更多