我尝试用cmake更改编译器:
SET(CMAKE_C_COMPILER "/opt/rh/devtoolset-2/root/usr/bin/gcc")
SET(CMAKE_CXX_COMPILER "/opt/rh/devtoolset-2/root/usr/bin/g++")
我在调用“PROJECT”命令之前在项目开始时这样做。 但是当我调用cmake时,我得到一个无限循环,我有以下输出:
-- The C compiler identification is GNU 4.8.2
-- The CXX compiler identification is GNU 4.8.2
-- Check for working C compiler: /opt/rh/devtoolset-2/root/usr/bin/gcc
-- Check for working C compiler: /opt/rh/devtoolset-2/root/usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /opt/rh/devtoolset-2/root/usr/bin/g++
-- Check for working CXX compiler: /opt/rh/devtoolset-2/root/usr/bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Doxygen: /usr/bin/doxygen (found version "1.6.1")
-- Looking for C++ include tut.h
-- Looking for C++ include tut.h - found
-- [STATUS] Found tut.h
-- Configuring done
You have changed variables that require your cache to be deleted.
Configure will be re-run and you may have to reset some variables.
The following variables have changed:
CMAKE_CXX_COMPILER= /usr/bin/c++
CMAKE_CXX_COMPILER= /usr/bin/c++
所以即使在调用cmake之前删除了缓存,我也会在无限循环中反复出现此消息...
编辑:解决方案非常简单:您需要使用cmake版本2.8.9并且问题不会出现。
答案 0 :(得分:1)
解决方案非常简单:您需要使用cmake版本2.8.9并且问题不会出现。
答案 1 :(得分:1)
由于这是Google对我的第一个结果,我想我会为Quentin提供替代解决方案。
如果使用-DCMAKE_TOOLCHAIN_FILE = toolchain.cmake调用cmake命令,则可以将CMAKE_C_COMPILER和CMAKE_CXX_COMPILER覆盖到新的toolchain.cmake文件中,cmake将正确加载覆盖而不会产生无限循环。
此解决方案为那些无法轻松升级其cmake的用户提供了修复(例如,如果您是非root用户和非sudo用户),那些只想避免升级包或管理其他包的工作的人,或者那些不想打扰他们的系统管理员的人。此外,如果您希望动态选择它,toolchain.cmake文件仍然可以执行逻辑以查找适当的或最新的devtoolset。
此解决方案不适用于那些不会或不能将-DCMAKE_TOOLCHAIN_FILE参数添加到cmake调用的人。
答案 2 :(得分:1)
原因可能是其他cmake模块改变了你设置的变量。所以找到cmake的代码,放在你的命令之前(SET(CMAKE_CXX_COMPILER "/opt/rh/devtoolset-2/root/usr/bin/g++")),应该可以解决了。
我遇到了 pybind11 子模块的问题,如下
SET(CMAKE_C_COMPILER /usr/bin/gcc)
SET(CMAKE_CXX_COMPILER /usr/bin/g++)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3 -march=native")
add_subdirectory(pybind11)
解决方案是将其更改为:
add_subdirectory(pybind11)
SET(CMAKE_C_COMPILER /usr/bin/gcc)
SET(CMAKE_CXX_COMPILER /usr/bin/g++)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3 -march=native")