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