cmake中修改默认编译器的两个问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake中修改默认编译器的两个问题相关的知识,希望对你有一定的参考价值。

参考技术A 在为交叉编译工程写cmake脚本时,可以在脚本里修改默认编译器的值。这种方法会碰到下面两个问题

例如,下面是一个经过简化后的CMakeLists.txt:

cmake+make的输出如下:

可以看到,set(CMAKE_CXX_COMPILER "/usr/bin/g++-4.8")命令之后,默认编译器已经由g++-5.5修改为了g++-4.8,且编译阶段确实也使用的是g++-4.8。但是此时CMAKE_CXX_COMPILER_VERSION的值仍然是5.5。

例如,顶层CMakeLists.txt中的内容如下:

子目录sub/CMakeLists.txt中只有一行:

cmake就会陷入死循环:

问题1:

问题2:

但是有个更简单的方法,可以解决以上所有问题:
在第一个project命令前,修改默认编译器的定义。
例如:

使用与系统默认不同的编译器运行 CMake

【中文标题】使用与系统默认不同的编译器运行 CMake【英文标题】:Run CMake with a different compiler than the system default 【发布时间】:2014-06-16 08:49:05 【问题描述】:

我正在尝试build something that requires CMake,但是当我尝试时:

cmake -DBUILD_EXAMPLES=YES -DBUILD_TESTS=YES

我得到错误:

Your systems default compiler is GCC.  This project makes use of c++11
features present only in versions of gcc >= 4.9.  You can use a different
compiler by re-running cmake with the command switch "-D
CMAKE_CXX_COMPILER=<compiler>"

我尝试过使用CMAKE_CXX_COMPILER=c++11CMAKE_CXX_COMPILER=g++11,但它们也会出错。这是因为我使用了错误的变量还是因为我没有安装 c++11?解决办法是什么?

【问题讨论】:

您确定您的 gcc 至少为 4.9 吗?我想不是。此外,您设置的 CMAKE_CXX_COMPILER 的值都不是我所知道的 c++ 编译器的可执行名称。 【参考方案1】:

您的编译器似乎太旧了。一定要检查gcc -v的输出。

如果您不想替换系统的默认编译器,可以在命令行中指定替代编译器,如下所示:

CXX=g++49 CC=gcc49 cmake -DBUILD_EXAMPLES=YES -DBUILD_TESTS=YES <path_to_source>

其中g++49gcc49 是您系统上替代编译器的名称。

大多数 Linux 发行版允许同时安装多个版本的 gcc,因此您应该能够轻松实现这一点。

【讨论】:

以上是关于cmake中修改默认编译器的两个问题的主要内容,如果未能解决你的问题,请参考以下文章

CMake构建类型和编译选项

关于pytorch在windows上编辑的问题集合

CMake 默认编译链接选项

在 CMake 项目中动态更改编译器标志

CMake:取决于构建类型的默认标志

让 CMake 明确选择 MSVC 平台工具集