Ära kasuta C/C++ buildimiseks make, kasuta ANTi

Nii, kuna ma olen viimased kuu aega C++ kirjutanud, siis on mul kui Java progejal on mõned soovitused C/C++ progejatele.

Nimelt hakkavad kõik Apache C/C++ projektid kasutama buildimiseks ANTi (Nt Axis-C/ARP teevad seda juba). Teatavasti on ANT de facto build tool Java projektide buildimiseks. Viimasel ajal on aga sinna lisandunud ka taskid C ja C++ buildmiseks.

Kõige

pealt väike näide, kuidas üks anti build välja näeb:

 
<project name="sample" default="compile" basedir=".">
<property file="build.properties"/>
<path id= "cc.classpath">
<pathelement location= "libtools/cpptasks.jar"/>
</path>
 
<taskdef resource= "cpptasks.tasks" loaderref="cc.loader">
<classpath refid= "cc.classpath"/>
</taskdef>
 
<typedef resource= "cpptasks.types" loaderref="cc.loader">
<classpath refid= "cc.classpath"/>
</typedef>
 
<target name="init">
<available file="build.properties" property="build_properties"/>
<fail unless="build_properties">build.properties not found. If you are  running this script first time, you have to copy  build.properties.example to build.properties and change properties in  that file to suit your environment. Later you can use commands ant, ant  clean and ant test</fail>
<mkdir dir="${dir.obj}"/>
</target>
<target name="compile" depends="init">
<cc objdir="${dir.obj}" name="g++" debug="${debug}"
outtype="executable"
outfile="${dir.build}/sample">
<fileset dir="${dir.src}">
<include name="*.c"/>
<include name="*.cpp"/>
<exclude name="**/*Test.cpp"/>
<exclude name="**/TestApp.cpp"/>
</fileset>
<libset libs="curl"/>
<libset libs="log4cxx"/>
<libset libs="Ice" dir="${lib.ice}"/>
<includepath>
<pathelement path="${include.ice}"/>
</includepath>
</cc>
</target>
 
<target name="clean">
<delete dir="${dir.build}"/>
</target>
</project>

ja build.properties on selline

#where to put executables and obj files
dir.build=build
dir.obj=${dir.build}/obj
dir.src=src

# Ice home directories
include.ice=/opt/Ice-3.0.1/include
lib.ice=/opt/Ice-3.0.1/lib

#build target
debug=true

Build kompileerib kõik .c ja .cpp failid kataloogist src (väljaarvata failid, mis lõpevad *Test.cpp ja TestApp.cpp). Linkimisel kasutatakse libe curl, log4cxx ja Ice, mis ise asub kataloogis ${lib.ice}. Lisaks süsteemi includedele otsib cc task .h faile ${include.ice} kataloogist. .o failid pannakse kataloogi ${dir.obj} ja kogu lingitakse executable ’sample’. Et build.xml töötaks peab olema libtools kataloogis cc taski jarid.
IMHO põhjused, miks kasutada ANTi make/automake asemel

  • pole jama tühikute ja tabidega
  • pole vaja põlevatest rõngastest läbi hüpata, et kompileerida kõik sorstufailid kataloogis
  • Platvorm independent (proovi buildida sama makega Windowsi ja Linuxi all)
  • Anti dokumentatsioon on selgem
  • Anti skript on loetavam
  • Ant on võimsam (pluginad ja addonnid platvorm independent)
  • automake’ga toolidega projekti kokkulaskmiseks tuleb käivitada 5 käsku, antiga 1 ;)
    aclocal
    autoconf
    automake -a
    ./configure
    make 

    vs.

    ant

Lingid:

http://ant.apache.org/
http://ant-contrib.sourceforge.net/cc.html
http://ws.apache.org/axis/cpp/antbuild-guide.html
http://www.ddj.com/184405433

Leave a Reply