【问题标题】:How to get CMake to choose between multiple compilers?如何让 CMake 在多个编译器之间进行选择?
【发布时间】:2018-10-09 02:24:40
【问题描述】:

假设我有一个带有多个 C/C++ 编译器的系统 - 各种版本的 GCC、clang 和 ICC。还假设我有一个 CMake C/C++ 项目,它对要使用的 C/C++ 编译器有某些要求和某些偏好;更复杂的是,假设这些要求和偏好是根据我设置的项目选项的组合动态生成的(使用ccmake 或其他方式)。

现在,关于使用非默认编译器的其他答案建议设置 CC 或 CXX 环境变量 - 但这在这里显然不合适。

有没有办法让 CMake :

  1. 检测可用的编译器。
  2. 根据一些规则/排名机制选择它喜欢的?

注意事项:

  • CMake 3.0 。您可以假设 CMake 版本较新,但请明确说明。
  • 在这个问题中选择 C ​​或 C++ 是出于我自己的需要,但如果该解决方案适用,当然也可以是其他语言。

【问题讨论】:

  • 您可以在命令行中为 cmake 指定生成器
  • @AlexeyAndronov :我没有关注,请详细说明。
  • 看看这里:https://stackoverflow.com/questions/25941536/what-is-a-cmake-generator。基本上,您可以在命令行中为 ide 生成解决方案文件的 cmake commane 指定。看来这是你需要的
  • @AlexeyAndronov:这似乎与我的需要无关。
  • 在 cmake 时很难检测出哪些编译器可用,并且更难运行多个。这根本不是 cmake 的设计方式。它假定生成一个固定的编译器。但是您现在可以测试某些 c++11/14/17 功能及其可用性(请参阅cmake-compile-features)。或者,您可以编写“测试”并使用try_compile。这不允许您选择编译器,但至少在不足时会出错。

标签: c++ cmake build-automation


【解决方案1】:

从历史上看,也可能在技术上,C 编译器是 CMake 运行的基础。许多命令依赖于编译器,例如检测符号或尝试编译一段代码。

据我所知,没有办法测试多个编译器并选择一个。要得到这个,你必须

  • 要么包装 CMake 调用,并在外部添加一些逻辑,从而将不同的编译器添加到 CMake 调用中
  • 或者必须自己重新编写一堆 CMake 函数。

我的建议:接受 CMake 的工作方式并将其传授给您的用户。

【讨论】:

  • 我实际上是我唯一的用户。但是 - 好吧,我猜。
  • 我知道有人拥有多个 shell 脚本,这些脚本具有不同的编译器集和通过 -D 传递的相关参数。使用相应命名的源外构建目录,它们可以非常有效地工作。不确定您是否可以从这种方法中获利。
猜你喜欢
  • 2015-11-21
  • 2012-09-10
  • 2012-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
相关资源
最近更新 更多