1. 程式人生 > >ant呼叫make實現Makefile編譯

ant呼叫make實現Makefile編譯

步驟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>