4

我想检查我的 C++ 项目是否在旧版本的 GCC 上编译。出于这个原因,我安装了旧版本并希望 CMake 使用它来编译我的项目。

关于更改编译器的 CMake FAQ告诉我这是正确的方法:

CC=gcc-4.4 CXX=g++-4.4 cmake -G "Unix Makefiles" ..

所以这就是我输入的内容,CMake 似乎运行良好:

chris@chris-machine:~/projects/myProject/build$ CC=gcc-4.4 CXX=g++-4.4 cmake -G "Unix Makefiles" ..
-- 找到 PythonInterp:/usr/bin/python(找到版本“2.7.4”)
-- 寻找包含文件 pthread.h
-- 寻找包含文件 pthread.h - 找到
-- 寻找 pthread_create
-- 寻找 pthread_create - 未找到
-- 在 pthreads 中寻找 pthread_create
-- 在 pthreads 中寻找 pthread_create - 未找到
-- 在 pthread 中寻找 pthread_create
-- 在 pthread 中寻找 pthread_create - 找到
-- 找到的线程:TRUE  
-- 配置完成
-- 生成完成
-- 构建文件已写入:/home/chris/projects/myProject/build

但是,现在查看 CMakeCache.txt 我发现:

//CXX 编译器。
CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++

显然 CMake 没有使用我指定的编译器。当我将此行更改为使用 g++-4.4 并再次运行 CMake 时,它​​将创建一个无限循环:

chris@chris-machine:~/projects/myProject/build$ CC=gcc-4.4 CXX=g++-4.4 cmake -G "Unix Makefiles" ..
-- 配置完成
您更改了需要删除缓存的变量。
配置将重新运行,您可能需要重置一些变量。
以下变量已更改:
CMAKE_CXX_COMPILER= /usr/bin/g++-4.4

-- 找到 PythonInterp:/usr/bin/python(找到版本“2.7.4”)
-- 寻找包含文件 pthread.h
-- 寻找包含文件 pthread.h - 找到
-- 寻找 pthread_create
-- 寻找 pthread_create - 未找到
-- 在 pthreads 中寻找 pthread_create
-- 在 pthreads 中寻找 pthread_create - 未找到
-- 在 pthread 中寻找 pthread_create
-- 在 pthread 中寻找 pthread_create - 找到
-- 找到的线程:TRUE  
-- 配置完成
您更改了需要删除缓存的变量。
配置将重新运行,您可能需要重置一些变量。
以下变量已更改:
CMAKE_CXX_COMPILER= /usr/bin/g++-4.4

-- 找到 PythonInterp:/usr/bin/python(找到版本“2.7.4”)
// 等等...

为什么 CMake 不使用我指定的编译器,我该如何解决这个问题?

4

2 回答 2

6

从您提供的链接:

此方法不保证适用于所有生成器

使用第二种方法:

cmake -G "你的生成器" -D CMAKE_C_COMPILER=gcc-4.4 -D CMAKE_CXX_COMPILER=g++-4.4 path/to/your/source

如果没有帮助:

  1. 使用绝对路径
  2. 不要忘记清理构建目录中的所有内容
于 2013-08-21T05:48:55.387 回答
4

我也遇到过这个确切的问题。显然这是 CMake 中的“无法修复”问题:https ://cmake.org/Bug/view.php?id=14841

一种解决方法是CMakeCXXCompiler.cmake每次要重新生成构建目录时删除构建目录的 CMakeFiles 目录中的文件。

路径应该是:build_directory/CMakeFiles/CMAKE_VERSION/CMakeCXXCompiler.cmake。在 Linux 上,您可以CMAKE_VERSION使用cmake --version | cut -d ' ' -f 3.

一个简洁的“修复”是只要您预计会遇到此问题,只需将该文件的删除添加到您的构建脚本中。

于 2018-04-12T14:59:11.717 回答