前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cmake 生成Makefile时指定c/c++编译器

cmake 生成Makefile时指定c/c++编译器

作者头像
10km
发布2019-05-25 22:45:13
6.9K0
发布2019-05-25 22:45:13
举报
文章被收录于专栏:10km的专栏10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433812

linux下在使用cmake生成Makefile的时候,如果不指定编译器,则默认是使用系统原生的编译器,

当操作系统中安装了新的版本的编译器,多个版本编译器共存的时候,如果想使用新版本的编译器,在cmake生成Makefile的时候就需要指定编译器。

这就是我目前遇到的情况:

我的项目代码是用C++11写的,需要支持C++11的编译器,而我使用的CentOS6.5原生的编译器是gcc4.4.7(位置/usr/bin/g++),所以我下载了gcc5.2.0编译,并使用默认安装(位置:/usr/local/bin/g++),两个版本的编译器共存于操作系统。

不论环境变量$PATH怎么设置,cmake在生成Makefile时,如果不指定编译器,生成的Makefile都会调用/usr/bin下的g++/gcc。

所以这种情况下必须指定编译器。

cmake-gui

用cmake-gui配置Makefile的时候如下操作:

这时不能选择默认的第一项(Use default native compilers),而是要选择第二项(Specify native compilers)

在这里填写指定c/c++编译器的路径

shell脚本

那么如果要在脚本中调用cmake生成Makefile时,应该如何写脚本呢?

#!/bin/sh
GXX_PATH=
## 先判断原生的编译器是不是满足要求
if [ `/usr/bin/g++ -dumpversion` != "5.2.0" ]
then
    ## 再判断另外安装的编译器是不是满足要求
    if [ `/usr/local/bin/g++ -dumpversion` = "5.2.0" ]
    then
        ## 指定c/c++编译器路径,并指定CMAKE_BUILD_TYPE为RELEASE
        GXX_PATH="-DCMAKE_CXX_COMPILER:FILEPATH=/usr/local/bin/g++ -DCMAKE_C_COMPILER:FILEPATH=/usr/local/bin/gcc -DCMAKE_BUILD_TYPE:STRING=RELEASE"
        ## 进一步可以参考生成的Makefile所在文件夹下的CMakeCache.txt文件进行更多选项的配置
    else
        ## 找不到符合要求版本的编译则报错退出
        echo "g++/gcc compiler required version 5.2.0"
        exit -1
    fi
fi
BUILD_FOLDER=../build
## 保存当前路径位置,切换到BUILD_FOLDER
pushd $BUILD_FOLDER
## 生成 Makefile,
cmake "`dirs +1`" $GXX_PATH -G "Eclipse CDT4 - Unix Makefiles"
## 这里-G "Eclipse CDT4 - Unix Makefiles"用于生成eclipse格式的Makefile文件,
## 如果不指定,可以正常用make编译,但eclipse下不能对项目工程进行编译和配置。
## 恢复当前路径
popd
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年01月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • cmake-gui
  • shell脚本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档