【问题标题】:cmake error building llvm/clang under macOS在 macOS 下 cmake 错误构建 llvm/clang
【发布时间】:2017-06-11 04:55:33
【问题描述】:

我在为 llvm/clang 运行 cmake 时收到以下消息:

-- Performing Test COMPILER_RT_TARGET_HAS_ATOMICS - Success
CMake Error at cmake/modules/AddLLVM.cmake:589 (if):
  if given arguments:

    "LTO" "IN_LIST" "LLVM_DISTRIBUTION_COMPONENTS" "OR" "NOT" "LLVM_DISTRIBUTION_COMPONENTS"

  Unknown arguments specified
Call Stack (most recent call first):
  tools/lto/CMakeLists.txt:19 (add_llvm_library)


-- Configuring incomplete, errors occurred!

这是我正在使用的命令:

cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_LTO=开启 -Wno-dev ..

几个月前,我成功构建了llvm/clang 5.0。但是今天,我在各个目录和子目录上做了一个“git pull”来获取最新的变化。

另外,我将我的 cmake 更新到 3.8.2。但这没有帮助。

根据评论者的请求,这里是没有no-dev 选项的输出:

-- Performing Test COMPILER_RT_TARGET_HAS_ATOMICS - Success
CMake Warning (dev) at cmake/modules/AddLLVM.cmake:589 (if):
  Policy CMP0057 is not set: Support new IN_LIST if() operator.  Run "cmake
  --help-policy CMP0057" for policy details.  Use the cmake_policy command to
  set the policy and suppress this warning.

  IN_LIST will be interpreted as an operator when the policy is set to NEW.
  Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
  tools/lto/CMakeLists.txt:19 (add_llvm_library)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Error at cmake/modules/AddLLVM.cmake:589 (if):
  if given arguments:

    "LTO" "IN_LIST" "LLVM_DISTRIBUTION_COMPONENTS" "OR" "NOT" "LLVM_DISTRIBUTION_COMPONENTS"

  Unknown arguments specified
Call Stack (most recent call first):
  tools/lto/CMakeLists.txt:19 (add_llvm_library)

【问题讨论】:

  • 选项 Wno-dev 禁用警告,这可能会显示错误。 (可能IN_LIST 不支持cmake_minimum_required 中指定的版本。)不带此选项运行cmake
  • @Tsyvarev:我已经更新了我的问题,也列出了没有no-dev 选项的输出。

标签: c++ macos cmake clang llvm


【解决方案1】:

要在if() 表达式中使用IN_LIST 运算符,应启用策略CMP0057。正如您从警告消息中看到的那样,这不是您的情况。

可以通过cmake_policy(SET) 命令启用该策略。此外,cmake_minimum_required 使用足够的版本(在给定情况下为“3.3”)调用会自动启用该策略。

请注意,即使您使用更高版本的 CMake,它也不会启用该策略:CMake 尊重cmake_minimum_required 中给出的版本。

【讨论】:

  • 是的。谢谢。我也刚刚意识到这一点。我看到 LLVM 的顶级 CMakeLists.txt 有这个,但它没有传播到 cmake/modules/AddLLVM.cmake。所以我为该文件启用了 CMP0057 的策略,cmake 完成。我的更改不是处理它的正确方法。但它可以满足我目前的需要。
猜你喜欢
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2017-01-20
相关资源
最近更新 更多