【问题标题】:How can I influence CMake's compiler choice logic?如何影响 CMake 的编译器选择逻辑?
【发布时间】:2016-04-29 12:29:55
【问题描述】:

我正在使用 C++ 语言开发一个项目(但是 - 这不是 C++ 特定的问题,真的)。在我的系统上,安装了几个 C++ 编译器,同一个编译器的多个版本,甚至可能在我自己的主目录下构建了一些版本。我为不同的目的使用不同的编译器(C++)(尽管我在这里夸大了一点,使问题更笼统)。

现在,出于某种原因,我的项目取决于编译器是 gcc 而不是 clang,并且版本介于 4.7 和 4.9 之间,并且首选更新版本。

我想让 CMake 找到我拥有的相关编译器,并使用可用的最好的编译器(如果有有效的编译器)。但是 - 我希望这不仅发生在我的系统上;这很容易强迫。我希望它在 any(合理的)系统上执行此操作,而不是依赖于抓取我的代码的开发人员对 CMakeLists.txt 进行任何自定义或使用 CXX=/some/thing 等显式设置编译器。

更具体地说:

  • 如何影响 CMake 在其中查找编译器的位置类型?
  • 如何影响这些位置的搜索顺序?
  • 如何表达对某些编译器提供程序和版本的偏好?
  • 如何表达对编译器提供程序和版本的约束?

注意事项:

  • 仅适用于 CMake 3.x 的答案是相关的,但我也对 CMake 2.8.x 感兴趣。
  • 您可以告诉我 RTFM,但请具体说明什么 FM 以及在 FM 中的位置(以及它是否真的对我有帮助)。
  • 我正在使用 Linux 以防万一。

【问题讨论】:

  • 我怀疑如果 CMake 搜索,它是根据你的路径。所以 $PATH 中路径的顺序。
  • @hiandbaii:但这只是故事的一部分。假设我的路径依次有 3 个g++s、一个g++-5.2g++-4.6g++-4.8g++-4.7。我怎样才能告诉它喜欢什么?
  • 我不认为有任何官方的方式来限制允许的编译器,但你可以肯定地用 CMAKE_CXX_COMPILER_ID 和 CMAKE_CXX_COMPILER_VERSION 编写一些控制语句
  • @hiandbaii:我可以表达 vesion 约束吗?
  • 这就是你在 CMAKE_CXX_COMPILER_VERSION 中使用的东西?

标签: cmake build-automation build-settings


【解决方案1】:

除非设置了 CXX 或 -DCMAKE_CXX_COMPILER 传递给您的 CMake 调用,否则 CMake 正在使用 /usr/bin/c++。

您可以从 CMAKE_CXX_COMPILER 中获取找到的编译器版本,如果不够,则会出错。如果您检查特定的 C++ 编译器功能(如可变参数模板),情况也是如此。
但我不知道如何检查多个编译器并通过 CMake 选择一个。

【讨论】:

    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2011-02-24
    相关资源
    最近更新 更多