linux下使用cmake如何指定编译器路径

近期需要使用cmake编译项目。而项目要求c++11支持。在服务器中,有多个gcc编译命令同时存在。问题就出在这里,cmake产生的makefile文件,执行make后,一直提示不支持c++11的语法。明显就是调用的g++命令版本不对。

仔细查看了下cmake时的输出结果,发现如下重要信息:

– The C compiler identification is GNU 4.4.6
– The CXX compiler identification is GNU 4.4.6
– Check for working C compiler: /usr/bin/cc
– Check for working C compiler: /usr/bin/cc – works
– Detecting C compiler ABI info
– Detecting C compiler ABI info - done
– Check for working CXX compiler: /usr/bin/c++
– Check for working CXX compiler: /usr/bin/c++ – works
– Detecting CXX compiler ABI info
– Detecting CXX compiler ABI info - done 我们可以看到,这里面主要是编译器的路径检查。而这里,检查到的gcc命令的路径是
/usr/bin/c++
而这里的c++,其实是g++,不知道是系统改名的还是管理员手动改名的。查看了下它的版本: 4.4.6,果然是不支持c++11的版本。也就是说,如果我们不指定编译器,那么,cmake会使用系统原生的编译器。

现在,问题是找到了,那么如何解决呢?在cmake生成makefile文件时,指定编译器。How?

1.设置环境变量
export CC=gcc-4.2 CXX=/usr/bin/g+±4.2
其中,CC是设置gcc编译器,而CXX是设置g++编译器。这个方法不适用于Xcode

2.使用 cmake -D
在命令行下,使用-D 设置CMAKE_FOO_COMPILER 变量值为有效的编译器名称或者全路径。如

cmake -D CMAKE_C_COMPILER=gcc CMAKE_CXX_COMPILER=g++ /path/to/your/source
3.(避免)使用set()
使用set()在CMakeLists.txt 文件中设置CMAKE_FOO_COMPILER 变量值为有效的编译器名称或者全路径。必须在任何语言之前调用set(比如projuect()或enable_language())。

例如:

SET(CMAKE_C_COMPILER /usr/bin/gcc)
SET(CMAKE_CXX_COMPILER /usr/bin/g++)
这个方法,在我的服务器中,无效。不知道是因为我的服务器问题,还是cmake开始不支持这个方法了。正如FAQ中所言,我们还是避免使用吧。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值