ant呼叫make實現Makefile編譯
阿新 • • 發佈:2019-02-02
步驟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>