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

2019-05-25 22:44:52 浏览数 (1)

版权声明:本文为博主原创文章,转载请注明源地址。 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:

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

代码语言:javascript复制
ECHO OFF
SET work_folder=%BUILD_FOLDER%
SET source_folder=�%
REM
IF not "%work_folder%" =="" goto doNewPrj
IF not "%1" == "" work_folder="%1"
SET work_folder=�%.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 编译器》。

0 人点赞