首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用cmake修改编译器会创建无限循环。

用cmake修改编译器会创建无限循环。
EN

Stack Overflow用户
提问于 2015-08-31 08:10:33
回答 4查看 3.8K关注 0票数 7

我尝试用cmake更改编译器:

代码语言:javascript
复制
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时,我得到了一个无限循环,我有以下输出:

代码语言:javascript
复制
-- 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之前删除了缓存.

编辑:解决方案非常简单:您需要使用cmakeVersion2.8.9,并且问题不会出现。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-06 07:53:55

解决方案非常简单:您需要使用cmakeVersion2.8.9,并且问题不会出现。

票数 0
EN

Stack Overflow用户

发布于 2017-08-13 17:26:29

因为这是我在谷歌上的第一个结果,我想我会为昆汀提供一个替代的解决方案。

如果使用-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake调用cmake命令,则可以将CMAKE_C_COMPILER和CMAKE_CXX_COMPILER重写放到一个新的toolchain.cmake文件中,而cmake将正确地加载覆盖,而不需要无限循环。

这种解决方案为那些无法轻松升级cmake的人(比如您是一个非根用户和非sudo用户)、那些只想避免升级包或管理额外软件包的人、或者那些不想麻烦他们的sysadmin的人提供了一个解决方案。此外,如果您想让toolchain.cmake文件动态地选择它,那么它仍然可以执行逻辑查找适当的或最新的devtoolset。

此解决方案将不适用于那些不愿或不能将-DCMAKE_TOOLCHAIN_FILE参数添加到cmake调用中的人。

票数 2
EN

Stack Overflow用户

发布于 2021-01-13 10:22:00

原因可能是其他cmake模块更改了您设置的变量。因此,找到cmake代码并将其放在命令(SET“/opt/rh/devtoolset-2/root/usr/bin/g++”)之前,它应该得到解决。

我在pybind11子模块中遇到了以下问题

代码语言:javascript
复制
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)

解决办法是将其改为:

代码语言:javascript
复制
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")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32306648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档