2

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

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

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

更具体地说:

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

笔记:

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

1 回答 1

0

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

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

于 2016-01-22T21:37:44.277 回答