您的位置:首页 > 运维架构 > Shell

ant调用make实现Makefile编译

2016-01-01 13:05 666 查看
上一篇博文《cmake:shell(bat,sh) 脚本方式生成Makefile》中完成了cmake生成Makefile脚本的过程,也就是步骤1,本文谈谈步骤2和步骤3的实现:

步骤2:

为了让ant能执行make,还得用脚本实现

linux sh脚本实现,build.sh:

#!/bin/sh

export BUILD_FOLDER="`cd "$(dirname "$0")"; pwd`.prj"
## 判断Makefile是否存在,如果不存在,则调用newprj.sh生成Makefile
if [ ! -r "$BUILD_FOLDER/Makefile" ]
then
./newprj.sh
fi

cd $BUILD_FOLDER
# 执行clean 清除已经有编译生成的文件
make clean
# make编译
make


windows bat脚本实现,build.bat:

ECHO OFF
SET BUILD_FOLDER=%cd%.prj
IF not exist "%BUILD_FOLDER%/Makefile" call newprj.bat
pushd "%BUILD_FOLDER%"
make clean
make
popd


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

步骤3:

有了步骤2中的build.sh/build.bat,就可以在ant脚本中调用它们实现项目编译了。

<project name="codemgr" basedir="." default="release">
<property environment="env" />
<import file="${basedir}/../ant/build-common-param.xml" />
<!--判断操作系统类型-->
<condition property="is.windows">
<or>
<os family="windows" />
<os family="winnt" />
<os family="win9x" />
</or>
</condition>
<condition property="is.linux">
<and>
<os family="unix" />
<os name="Linux" />
</and>
</condition>
<property name="lib.dir" value="${basedir}/../${ant.project.name}.prj/lib"/>
<available file="${lib.dir}" type="dir" property="lib.dir.present"/>
<target name="release.linux" description="release naitve(linux .so)" if="is.linux">
<fail message="NOT FOUND: ${lib.dir}" unless="lib.dir.present"/>
<!--调用tar命令进行打包-->
<exec executable="tar" dir="${lib.dir}" osfamily="unix">
<arg line="-cf ${service.facedbservice.native.dir}/linux_x64/native.tar ."/>
</exec>
</target>
<target name="release.windows" description="release native(windows .dll)" if="is.windows">
<fail message="NOT FOUND: ${lib.dir}" unless="lib.dir.present"/>
<copy todir="${service.facedbservice.native.dir}/windows_x64">
<fileset dir="${lib.dir}" />
</copy>
</target>
<!--清除项目编译目录下的所有文件调用newprj.bat/sh生成新的Makefile-->
<target name="clean">
<exec executable="./newprj.sh" dir="${basedir}" osfamily="unix"/>
<exec executable="newprj.bat" dir="${basedir}" osfamily="windows"/>
</target>
<!--调用build.bat/sh进行项目编译-->
<target name="build">
<exec executable="./build.sh" dir="${basedir}" osfamily="unix"/>
<exec executable="build.bat" dir="${basedir}" osfamily="windows"/>
</target>
<!--根据操作系统类型的不同,将编译生成的目标文件复制到指定目录-->
<target name="release" depends="build,release.linux,release.windows"/>
<target name="all" depends="clean,build,release"/>
</project>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息