如何在CMake中分别使用不同GCC版本:初始化用GCC9,构建用GCC8?
解决CMake初始化用GCC9、构建用GCC8的问题
你的工具链文件无效的原因是:CMake在配置(初始化)阶段会将编译器路径写入缓存,后续直接设置CMAKE_C_COMPILER/CMAKE_CXX_COMPILER不会覆盖缓存值,所以始终用GCC9构建。
下面是两种可行的解决方法:
方法一:修改工具链文件,强制覆盖缓存
调整工具链文件,先指定初始化用的GCC9,再强制将缓存中的编译器改为GCC8,这样配置阶段用GCC9做特性检查,构建阶段用GCC8编译:
# 初始化阶段用GCC9,用于执行配置检查(比如编译器特性检测) set(CMAKE_C_COMPILER_INIT "/usr/bin/gcc-9") set(CMAKE_CXX_COMPILER_INIT "/usr/bin/g++-9") # 强制覆盖缓存中的编译器路径,指定构建阶段用GCC8 set(CMAKE_C_COMPILER "/usr/bin/gcc-8" CACHE PATH "C compiler" FORCE) set(CMAKE_CXX_COMPILER "/usr/bin/g++-8" CACHE PATH "CXX compiler" FORCE)
使用时直接指定工具链文件即可:
cmake -DCMAKE_TOOLCHAIN_FILE=your_toolchain.cmake .. cmake --build .
方法二:分阶段手动指定编译器
先以GCC9完成配置,再在构建阶段通过构建系统参数替换编译器:
- 配置阶段用GCC9:
cmake -DCMAKE_C_COMPILER=/usr/bin/gcc-9 -DCMAKE_CXX_COMPILER=/usr/bin/g++-9 ..
- 构建阶段用GCC8(根据你用的构建系统选择命令):
- 如果是Makefile生成器:
make CC=/usr/bin/gcc-8 CXX=/usr/bin/g++-8- 如果是Ninja生成器,直接通过环境变量指定:
CC=/usr/bin/gcc-8 CXX=/usr/bin/g++-8 cmake --build .
内容的提问来源于stack exchange,提问作者Steffen Roeber
相关产品推荐
相关产品推荐

