我如何影响CMake的编译器选择逻辑?

时间:2016-01-22 19:40:31

标签: cmake build-automation build-settings

我正在使用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上工作以防万一。

1 个答案:

答案 0 :(得分:0)

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

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