前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cmake:shell(bat,sh) 脚本方式生成Makefile

cmake:shell(bat,sh) 脚本方式生成Makefile

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

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

项目总体是用ant来控制编译的,但有一些用c/c++写的native的动态链接库是用cmake来生成Makefile文件编译的,为了统一用ant来控制所有代码的生成,就需要c/c++代码也能用ant脚本编译。

总体的过程是这样的:

步骤1.为了让ant能控制c/c++代码的编译,首先就需将cmake生成Makefile的过程脚本化。 步骤2.在ant脚本中调用步骤1中的脚本来实现Makefile生成 步骤3.在ant脚本中调用make实现c/c++代码编译

本文就先讲讲步骤1的做法,步骤2,步骤3参见《ant调用make实现Makefile编译》

步骤1

因为项目的设计是跨平台的,所以需要在windows和linux下分别实现不同的脚本

linux sh脚本实现,newprj.sh:

#!/bin/sh
GXX_PATH=
if [ `/usr/bin/g++ -dumpversion` != "5.2.0" ]
then
    if [ `/usr/local/bin/g++ -dumpversion` = "5.2.0" ]
    then
        GXX_PATH="-DCMAKE_CXX_COMPILER:FILEPATH=/usr/local/bin/g++ -DCMAKE_C_COMPILER:FILEPATH=/usr/local/bin/gcc -DCMAKE_BUILD_TYPE:STRING=RELEASE"
    else
        echo "g++ compiler required version 5.2.0"
        exit -1
    fi
fi
[ -z "$BUILD_FOLDER" ] && [ -n "$1" ] && BUILD_FOLDER="$1"
[ -z "$BUILD_FOLDER" ] && [ -z "$1" ] && BUILD_FOLDER="`cd "$(dirname "$0")"; pwd`.prj"
if [ -d $BUILD_FOLDER ]
then 
    rm -fr $BUILD_FOLDER/*
else 
    mkdir $BUILD_FOLDER
fi
pushd $BUILD_FOLDER
cmake "`dirs +1`" $GXX_PATH -G "Eclipse CDT4 - Unix Makefiles"
popd

windows bat脚本实现,newprj.bat:

ECHO OFF
SET work_folder=%BUILD_FOLDER%
SET source_folder=%cd%
REM
IF not "%work_folder%" =="" goto doNewPrj
IF not "%1" == "" work_folder="%1"
SET work_folder=%cd%.prj
:doNewPrj
IF exist "%work_folder%" rd /s /q "%work_folder%"
mkdir "%work_folder%"
pushd "%work_folder%"
cmake %source_folder% -G "Eclipse CDT4 - MinGW Makefiles"
popd
SET work_folder=
SET source_folder=

上面两个不同的脚本实现的功能类似,区别只是在不同的平台上运行。

这里要注意的是因为项目中的c/c++代码是用C++11写的,在CentOS6.5上使用gcc5.2.0编译器编译,CentOS6.5原生的gcc编译器版本是4.4.7不能满足编译要求,所以我升级了gcc编译器,安装在/usr/local/bin,而原来位于/usr/bin/的4.4.7版本的编译器还在。两个版本的编译器共存,所以 这里首先就要检测编译器版本,指定合适的编译器,参见我的另一篇博文《cmake 生成Makefile时指定c/c++编译器》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年01月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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