为啥在 CMake 配置和生成完成后使用 CLion 构建 OpenCV 时会出现错误?

Posted

技术标签:

【中文标题】为啥在 CMake 配置和生成完成后使用 CLion 构建 OpenCV 时会出现错误?【英文标题】:Why error occurs when using CLion build OpenCV after CMake configuration and generation done?为什么在 CMake 配置和生成完成后使用 CLion 构建 OpenCV 时会出现错误? 【发布时间】:2019-04-08 14:13:59 【问题描述】:

我发现在 Clion cmake 中总是添加-G "CodeBlocks - Unix Makefiles" 参数。使用cmake ../cmake ../

如您所见,我没有在 CMake 选项中添加任何参数。但是 CLion 添加 -G "CodeBlocks - Unix Makefiles"。

根据jetbrains。这个功能会修复,但不知道什么时候。CLion CMake默认生成器是CodeBlocks - Makefiles。

如果您通过 CLion 构建 OpenCV,您最终会发现 CMake 错误,如下所示。这是由-G "CodeBlocks - Unix Makefiles"引起的

Problems were encountered while collecting compiler information:
cc1plus: fatal error: /--/--/cmake-build-release/modules/calib3d/perf_precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/calib3d/perf_precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/calib3d/perf_precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/calib3d/perf_precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/calib3d/perf_precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/calib3d/perf_precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory
cc1plus: fatal error: /--/--/cmake-build-release/modules/core/precomp.hpp: No such file or directory

【问题讨论】:

你为什么要打扰 CLion 在内部做的事情来让你的代码运行?请详细说明这一点,因为您的实际问题似乎是其他问题。 请不要将反对票(顺便说一句,这不是来自我)视为冒犯,而更多地表明应该提高问题的质量。我的评论旨在帮助您改善问题。我确实想帮助您并为您提供高质量的答案。但要这样做,我需要正确理解您的问题,因此需要更多信息。 我猜CLion会自动添加-G参数并且不能删除。但是您知道当我尝试在 CLion 中构建 OpenCV 源代码时会发生什么。有很多关于perf_precomp.hpp precomp.hpp test_precomp.hpp 与该参数有关系的警告。因为当我使用命令行cmake时,再次没有错误。我认为这可能与github.com/sakra/cotire/issues/124 的问题相同。 【参考方案1】:

回答您的问题:您不能在 CLion 中更改 makefile 生成器,也不必这样做。

让我解释一下原因:

如果您仔细阅读输出,您会在所有错误消息之前看到以下内容:

-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/opencv/cmake-build-debug

这表明CMake项目的实际配置成功。此外,CLion 使用大量目标填充运行/调试配置下拉列表。 CMake 配置很好,您可以编码、编译和运行一切。如果 CMake 失败了,情况就不是这样了。

但是,在 CMake 完成后,CLion 想要执行一些额外的魔法(我不知道)。这就是所有错误消息的来源。

要摆脱它,您必须在 CMake 配置对话框中的 CMake 选项中添加以下标志:

-DENABLE_PRECOMPILED_HEADERS=OFF.

顺便说一句:构建类型是通过“构建类型:”选项的下拉菜单定义的,无需在CMake选项中重新设置。


总结:您的问题是XY-Problem 的典型案例。您想解决 CLion 给出的错误消息所指示的问题。但是,您没有询问这个问题并在您的问题中提供所需的信息,而是"asking about your attempted solution rather than your actual problem."

我只是在您的回答帖子中找到了缺失的信息,而不是问题,它是否属于。因此,如果您可以将您的帖子合并为一个综合问题,那就太好了。

这绝不意味着粗鲁或冒犯。我只是想给你一个提示,告诉你如何改进你的问题,以防止被否决或无人回答。

【讨论】:

您指出了问题出在哪里,但为什么 CMake CodeBlocks 生成器会让我们仍然不知道。老实说,感谢您的时间,并真正尝试帮助我解决问题。为我的冒犯性语言道歉。 @EricLu 你是对的,错误信息的原因仍然不清楚。但是,它似乎不是由生成器引起的,因为当我在命令行上运行 CMake 时,不会出现错误:cmake -H/tmp/opencv -B/tmp/opencv/build -G "CodeBlocks - Unix Makefiles" 对不起,你是对的,这看起来真的像 clion 的魔法。使用代码块生成器系统无法使错误发生,我的错误。

以上是关于为啥在 CMake 配置和生成完成后使用 CLion 构建 OpenCV 时会出现错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 CMake 在没有 CMAKE_CXX_FLAGS 的情况下生成 Makefile?

CMake 为 Win32 和 x64 生成 Visual Studio 2008 解决方案

C++ cmake 命令用法

为啥 cmake 文件 GLOB 是邪恶的?

在 Visual Studio 2017 中使用 Cmake 构建 ssh.dll

CMake 多配置生成器使用错误的构建目录