2016-01-22 97 views
2

我正在使用C++语言编写一个项目(但是 - 这实际上不是一个特定于C++的问题)。在我的系统上,安装了几个C++编译器,几个版本的相同编译器,甚至可能在我自己的主目录下创建了一些版本。为了不同的目的,我使用了不同的编译器(C++)(尽管我在这里夸大了一点,以使问题更一般化)。现在我如何影响CMake的编译器选择逻辑?

,我的项目依赖,出于某种原因,编译器GCC是不是铛,并与4.7和4.9之间的版本与新版本的偏好。

我想CMake的找到相关的编译器我有,并利用现有的最好的一个,如果有一个有效的。但是 - 我希望这不仅发生在我的系统上,这很容易强制。我想它做这个任何(合理的)系统,而不是取决于谁抓住了我的代码做的CMakeLists.txt的任何定制或CXX=/some/thing

更具体明确地设置编译开发商:

  • 如何影响各种位置的CMake查找编译器吗?
  • 我如何影响搜索这些位置的顺序?
  • 如何表达某些编译器提供程序和版本的偏好?
  • 如何在编译器提供者和版本上表达约束条件?

注:

  • 解答其工作的CMake 3.X仅是相关的,但我也有兴趣在CMake的2.8.x。
  • 你可以告诉我RTFM,但请具体说明哪些FM和其中的FM(以及它是否会真正帮助我)。
  • 我正在研究Linux以防万一。
+0

我怀疑,如果CMake搜索,它是根据你的路径。所以在$ PATH路径的顺序。 – hiandbaii

+0

@hiandbaii:但那只是故事的一部分。假设我的路径依次有3个'g ++','g ++ - 5.2','g ++ - 4.6','g ++ - 4.8'和'g ++ - 4.7'。我怎么能告诉它更喜欢什么? – einpoklum

+0

,我不认为有限制允许编译器任何正式的方式,但可以肯定地写有CMAKE_CXX_COMPILER_ID和CMAKE_CXX_COMPILER_VERSION – hiandbaii

回答

0

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

您可以从CMAKE_CXX_COMPILER得到发现编译器版本和错误,如果它是不够的。如果您检查特定的C++编译器功能(如可变参数模板),情况也是如此。
但我不知道一种方法来检查几个编译器,并选择一个CMake。