【发布时间】: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.2、g++-4.6、g++-4.8和g++-4.7。我怎样才能告诉它喜欢什么? -
我不认为有任何官方的方式来限制允许的编译器,但你可以肯定地用 CMAKE_CXX_COMPILER_ID 和 CMAKE_CXX_COMPILER_VERSION 编写一些控制语句
-
@hiandbaii:我可以表达 vesion 约束吗?
-
这就是你在 CMAKE_CXX_COMPILER_VERSION 中使用的东西?
标签: cmake build-automation build-settings