【问题标题】:How to disable warning in CMake 3.1 about cygwin WIN32 not being defined?如何在 CMake 3.1 中禁用关于未定义 cygwin WIN32 的警告?
【发布时间】:2015-02-23 21:01:56
【问题描述】:

我以前从未使用过 CMake,但我正在尝试一个不支持任何其他构建系统的 IDE (CLion),所以我试一试。我在每次构建开始时都会收到以下警告:

CMake 警告位于 /cygdrive/c/Users/admin/.clion10/system/cygwin_cmake/share/cmake-3.1.2/Modules/Platform/CYGWIN.cmake:15 (消息):CMake 不再在 Cygwin 上定义 WIN32!

(1) 如果你只是想构建这个项目,忽略这个 通过在您的 CMAKE_LEGACY_CYGWIN_WIN32=0 中设置警告或使其安静 环境或 CMake 缓存中。如果以后配置或构建 发生错误然后这个项目可能已经写在 假设 Cygwin 是 WIN32。在这种情况下,设置 CMAKE_LEGACY_CYGWIN_WIN32=1。

(2)如果你正在开发这个项目,添加这一行

set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required

在顶层 CMakeLists.txt 文件的顶部或设置最小值 所需的 CMake 版本为 2.8.4 或更高版本。然后教你的项目 在没有 WIN32 的情况下在 Cygwin 上构建

我已经尝试了两种建议的解决方案。这是我的 CMakeLists.txt 文件的前两行:

cmake_minimum_required(VERSION 3.1)
set(CMAKE_LEGACY_CYGWIN_WIN32 0)

但我仍然收到警告。我该如何摆脱它?

【问题讨论】:

  • 执行 -Wno-dev 选项以禁用这些警告:cmake -Wno-dev /path/to/source
  • 根据手册,该选项旨在“抑制针对 CMakeLists.txt 文件作者的警告”。作为 CMakeLists.txt 文件的作者,我宁愿不禁止针对我的警告,尤其是作为环境的新手,可能会犯错误...

标签: cmake cygwin


【解决方案1】:

根据 CMake 邮件列表上的 Nils Gladitz(他在 SO 上吗?):

发出警告的代码由“project()”运行。 由于您在顶级 CMakeLists.txt 中没有明确的 project() 调用,因此 CMake 会隐式地在顶部添加一个。 [1]

在要求 CMake >= 2.8.4 后显式调用 project() 的项目文件应该使警告消失:

cmake_minimum_required(VERSION 2.8.8)

project(Foo)

而且它似乎有效。

【讨论】:

  • 只是众多设计怪癖和陷阱之一,让这个工具使用起来如此令人头疼。
  • 同意。与许多其他工具一样,它似乎始于一个合理的想法,但在所有细节和特殊情况下迷失了方向。构建工具似乎天生就很难保持简单并且仍然可以完成工作,make 已经掉进了这个陷阱。有许多尝试尝试做cmake 尝试但没有牵引力的事情。
  • 我花了很多时间才找到这个解决方案。只需将 cmake_minimum_required 放在项目之前!!!我讨厌 CMake :-(
【解决方案2】:

set(CMAKE_LEGACY_CYGWIN_WIN32 0) 移动到 CMakeLists 文件的顶部。必须在 cmake_minimum_required 之前对其进行评估才能在此上下文中正常工作。

【讨论】:

  • 对我来说,这似乎是 CMake 中的一个错误,或者至少是有缺陷的逻辑。根据消息,您应该定义set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required。对我来说,评论表明如果我设置 cmake_minimum_required(VERSION 3.1) 消息应该消失(因为 3.1 >= 2.8.4)。然后消息继续明确声明OR set the minimum required version of CMake to 2.8.4 or higher(我的大写)。
【解决方案3】:

我的 cmake 文件用于 Cygwin 和 Linux。所以对我来说最简单的解决方案是编辑我的 Cygwin .bashrc 并添加行

export CMAKE_LEGACY_CYGWIN_WIN32=0

现在我不必在我的跨平台 cmake 文件中保留 Cygwin 特定的语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 2015-08-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多