【发布时间】: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_CHECK 或 BUILD_ALL 时,构建不会导致 Xcode 项目更新。
调用 cmake . 也不会检测到更改。
解决方法
我发现的最佳解决方法是删除 everything 两个文件:cmake_install.cmake 和 CMakeCache.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:问题已更新。