Ä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