crabs_makefile-5.2 ©2003-2008 - Christophe Cazajus (crabs-mettre_le_signe_at-crabs-world.com)
1 # 2 # ============================================================================= 3 # crabs_makefile-5.2 : Makefile pour developpement multi-OS, multi-variants 4 # Copyright (C) 2003-2008 : Christophe Cazajus (crabs-mettre_le_signe_at-crabs-world.com) 5 # 6 # Ce source fait partie d'un projet logiciel libre. Vous pouvez le distribuer 7 # et/ou le modifier en respectant les termes de la GNU General Public License 8 # version 2 ou (suite a votre propre choix) une version ulterieure. 9 # 10 # Ce programme est distribue dans l'espoir qu'il puisse etre utile, mais 11 # sans aucune garantie, meme si il est associe a un produit qui vous en 12 # propose une. Conformez-vous a la GNU General Public License pour avoir 13 # plus de precisions. 14 # 15 # L'auteur ne peut etre tenu responsable de l'utilisation faite des 16 # composantes associees a ce projet (en partie ou dans leur totalite). 17 # 18 # Une copie du fichier de la GNU GPL est fournie dans le repertoire DOC 19 # de ce projet sous le nom gnu_gpl.txt 20 # 21 # ============================================================================= 22 # 23 .SILENT: 24 .KEEP_STATE: 25 .SUFFIXES: 26 # 27 # Variables utiles 28 # 29 CC=g++ 30 31 CPPFLAGS+= -D_REENTRANT 32 33 CF_QT= -pipe -fno-exceptions -Wall -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -I$(QTDIR)/mkspecs/linux-g++ 34 LD_QT= -fnoexceptions -L$(QTDIR)/lib -lqt-mt 35 36 CF_GTK2=`pkg-config gtkmm-2.4 --cflags` 37 LD_GTK2=`pkg-config gtkmm-2.4 --libs` 38 39 include $(PROJET_MK)/projet.env 40 # 41 # Variable des variants 42 # 43 VARIANT=NORMAL 44 45 CF_NORMAL= -O 46 LD_NORMAL= -O 47 48 CF_DEBUG= -g 49 LD_DEBUG= -g 50 51 CFLAGS += -I$(PROJET)/INCLUDE 52 CPPFLAGS += -I$(PROJET)/INCLUDE 53 # 54 # Pour les dependances : fichier c ou c++ 55 # 56 d0=$(SRC) 57 d1=$(d0:%.c=%.c) 58 d2=$(d1:%.cpp=%.cpp) 59 d3=$(d2:%.f=) 60 d4=$(d3:%.sc=) 61 d5=$(d4:%.l=) 62 d6=$(d5:%.y=) 63 d7=$(d6:%.H=) 64 d8=$(d7:%.QH=%.QH) 65 d9=$(d8:%.qh=%.qh) 66 DEP=$(d9) 67 # 68 # recherche des includes a copie 69 # 70 i0=$(SRC) 71 i1=$(i0:%.c=) 72 i2=$(i1:%.cpp=) 73 i3=$(i2:%.f=) 74 i4=$(i3:%.sc=) 75 i5=$(i4:%.l=) 76 i6=$(i5:%.y=) 77 i7=$(i6:%.H=) 78 i8=$(i7:%.QH=) 79 i9=$(i8:%.qh=%.h) 80 INC=$(i9:%=$(PROJET)/INCLUDE/%) 81 # 82 # fichiers ETC 83 # 84 _ETC=$(ETC:%=$(PROJET)/ETC/%) 85 # 86 # Objet a compiler 87 # 88 C1=$(SRC:%.h=) 89 C2=$(C1:%.H=) 90 H_MOC1=$(C2:%.qh=.obj/$(OS)/$(VARIANT)/moc_%.o) 91 H_MOC2=$(H_MOC1:%.QH=.obj/$(OS)/$(VARIANT)/moc_%.o) 92 C_OBJ=$(H_MOC2:%.c=.obj/$(OS)/$(VARIANT)/%.o) 93 CPP_OBJ=$(C_OBJ:%.cpp=.obj/$(OS)/$(VARIANT)/%.o) 94 F_OBJ=$(CPP_OBJ:%.f=.obj/$(OS)/$(VARIANT)/%.o) 95 SC_OBJ=$(F_OBJ:%.sc=.obj/$(OS)/$(VARIANT)/%.o) 96 L_OBJ=$(SC_OBJ:%.l=.obj/$(OS)/$(VARIANT)/%.o) 97 Y_OBJ=$(L_OBJ:%.y=.obj/$(OS)/$(VARIANT)/%.o) 98 A_OBJ=$(Y_OBJ) $(OBJ) 99 100 _LIB=$(LIB:%=$(PROJET)/LIB/$(OS)/$(VARIANT)/%) 101 L=$(LIB:%.a=%) 102 103 _BIN=$(BIN:%=$(PROJET)/BIN/$(OS)/$(VARIANT)/%) 104 _PLIB=$(PLIB:%=$(PROJET)/LIB/$(OS)/$(VARIANT)/%) 105 106 _SBIN=$(SBIN:%=$(PROJET)/BIN/%) 107 D_SBIN=$(DIFFUS_SBIN:%=$(PROJET)/DIFFUS/$(OS)/BIN/%) 108 109 CDEF= -D$(OS) -D$(VARIANT) -DLINUX 110 INFO_C= .obj/$(OS)/$(VARIANT)/_info.c 111 INFO= .obj/$(OS)/$(VARIANT)/_info.o 112 VER=projet.info 113 114 # Internationnalisation : gettext 115 NLS_POT=$(NLS_PKG).pot 116 NLS_PO=$(NLS_LANG:%=%/$(NLS_PKG).po) 117 NLS_MO=$(NLS_LANG:%=$(PROJET)/I18N/%/$(NLS_PKG).mo) 118 # Internationnalisation : qt 119 QNL_TS=$(QNL_LANG:%=$(QNL_PKG)_%.ts) 120 QNL_QM=$(QNL_LANG:%=$(PROJET)/I18N/$(QNL_PKG)_%.qm) 121 122 .PRECIOUS: $(NLS_PO) $(NLS_POT) $(QNL_TS) 123 124 $(PROJET)/INCLUDE/%.h : %.h 125 echo Install INCLUDE $< 126 mkdir -p `dirname $@` 127 cp $< $@ 128 129 $(PROJET)/INCLUDE/%.h : %.qh 130 echo Install INCLUDE $< 131 mkdir -p `dirname $@` 132 cp $< $@ 133 134 $(PROJET)/BIN/% : % 135 echo Install SBIN $< 136 mkdir -p `dirname $@` 137 cp $< $@ 138 chmod +x $@ 139 140 $(PROJET)/ETC/%.css : %.css 141 echo Install ETC $< 142 mkdir -p `dirname $@` 143 cp $< $@ 144 145 $(PROJET)/ETC/%.xsl : %.xsl 146 echo Install ETC $< 147 mkdir -p `dirname $@` 148 cp $< $@ 149 150 $(PROJET)/ETC/% : % 151 echo Install ETC $< 152 mkdir -p `dirname $@` 153 cp $< $@ 154 155 .obj/$(OS)/$(VARIANT)/%.o : %.c 156 echo "--- C: $<" 157 mkdir -p `dirname $@` 158 gcc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) $(CDEF) $< 159 160 .obj/$(OS)/$(VARIANT)/%.o : %.cpp 161 echo "--- C++: $<" 162 mkdir -p `dirname $@` 163 g++ -c -o $@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) $< 164 165 .obj/$(OS)/$(VARIANT)/%.o : %.f 166 echo "--- F77: $<" 167 mkdir -p `dirname $@` 168 f77 -c -o $@ $(CF_$(VARIANT)) $(FFLAGS) $< 169 170 .obj/$(OS)/$(VARIANT)/%.o : %.sc 171 echo "--- SQL: $<" 172 mkdir -p `dirname $@` 173 esqlc -p $(SQLFLAGS) -f.obj/$(OS)/$(VARIANT)/$*.c $< 174 gcc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) $(CDEF) \ 175 .obj/$(OS)/$(VARIANT)/$*.c 176 177 .obj/$(OS)/$(VARIANT)/%.o : %.l 178 echo "--- Lex: $<" 179 mkdir -p `dirname $@` 180 lex $(LFLAGS) $< 181 mv lex.yy.c .obj/$(OS)/$(VARIANT)/$*.c 182 gcc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) -I`pwd` $(CDEF) \ 183 .obj/$(OS)/$(VARIANT)/$*.c 184 185 .obj/$(OS)/$(VARIANT)/%.o : %.y 186 echo "--- Yacc: $<" 187 mkdir -p `dirname $@` 188 yacc $(YFLAGS) $< 189 mv y.tab.c .obj/$(OS)/$(VARIANT)/$*.c 190 mv y.tab.h .obj/$(OS)/$(VARIANT)/$*.h 191 gcc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) -I`pwd` $(CDEF) \ 192 .obj/$(OS)/$(VARIANT)/$*.c 193 194 .obj/$(OS)/$(VARIANT)/moc_%.o : %.qh 195 echo "--- Moc: $<" 196 mkdir -p `dirname $@` 197 moc -o .obj/$(OS)/$(VARIANT)/moc_$*.cpp -f $< 198 g++ -c -o $@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) \ 199 .obj/$(OS)/$(VARIANT)/moc_$*.cpp 200 201 .obj/$(OS)/$(VARIANT)/moc_%.o : %.QH 202 echo "--- Moc: $<" 203 mkdir -p `dirname $@` 204 moc -o .obj/$(OS)/$(VARIANT)/moc_$*.cpp -f $< 205 g++ -c -o $@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) \ 206 .obj/$(OS)/$(VARIANT)/moc_$*.cpp 207 208 all : $(VER) $(DIR) $(DIRP) $(LIB) $(BIN) $(_SBIN) $(_ETC) $(NLS_MO) $(QNL_QM) 209 210 current : $(VER) $(DIR) $(DIRP) $(LIB) $(BIN) $(_SBIN) $(_ETC) $(NLS_MO) $(QNL_QM) 211 212 clean : FORCE 213 test -z "$(DIR)" || make -r clean_dir 214 -echo "CLEAN: `PrelativePath`" 215 if [ -d .obj ]; then rm -rf .obj; fi 216 if [ -d .dep ]; then rm -rf .dep; fi 217 if [ -f .make.state ]; then rm -f .make.state; fi 218 219 clean_dir: FORCE 220 for d in $(DIR); do (cd $$d && make -r clean ) ;done 221 222 $(DIR) : FORCE 223 -echo "== MAKE: `(cd $@ && PrelativePath)`" 224 cd $@ && make -r VARIANT=$(VARIANT) 225 226 $(DIRP) : FORCE 227 echo "== MAKE: $@" 228 (cd $@ && make -r VARIANT=$(VARIANT) ) 229 230 $(INFO) : $(INFO_C) 231 cc -c -o $(INFO) $(INFO_C) 232 233 $(INFO_C) : $(PROJET)/.projet/info.gpl $(DEP) $(A_OBJ) $(_PLIB) $(DLIB) 234 PgenInfo_c.sh $(OS) $(VARIANT) $(INFO_C) $L $(BIN) $(_PLIB) $(DLIB) 235 236 $(_LIB) : $(DEP) $(A_OBJ) $(INFO) 237 mkdir -p `dirname $@` 238 ar rv $@ $? 239 ranlib $@ 240 echo "== LIB: $(LIB)" 241 242 $(_BIN) : $(DEP) $(A_OBJ) $(_PLIB) $(INFO) $(DLIB) 243 echo "-=> Edition des liens: $(BIN)" 244 mkdir -p `dirname $@` 245 $(LD) -o $@ $(LD_$(VARIANT)) $(A_OBJ) $(INFO) $(_PLIB) $(DLIB) $(LDFLAGS) 246 echo "== BIN: $(BIN)" 247 248 $(LIB) : $(INC) $(_LIB) 249 250 $(BIN) : $(INC) $(_BIN) 251 252 $(PROJET)/I18N/%/$(NLS_PKG).mo : %/$(NLS_PKG).po 253 mkdir -p `dirname $@` 254 d=`dirname $@`;b=`basename $@`;echo " --==> MO: `PrelativePath $$d`/$$b" 255 msgfmt -c -o $@ $< 256 touch $@ 257 258 %/$(NLS_PKG).po : $(NLS_POT) 259 L=`dirname $@` ;\ 260 [ -d $$L ] || mkdir -p $$L ; \ 261 echo " -=> PO: $@" ;\ 262 if [ ! -f $@ ] ; then \ 263 msginit --no-translator -l $$L -i $< -o $@ ;\ 264 else \ 265 msgmerge -s -U $@ $< ;\ 266 fi 267 touch $@ 268 269 $(NLS_POT) : FORCE 270 export IL=`pwd`/nls.mk ; \ 271 export ROOT=`pwd` ; \ 272 printf "I18NS=" >$$IL ; \ 273 ( cd $(PROJET)/SRC ; make nls ROOT=$$ROOT ) ; \ 274 printf "\n\n" >>$$IL ; \ 275 echo "$@"' : $$(I18NS)' >>$$IL ; \ 276 echo -e "\t"'if [ -f $$@ ] ; then \' >> $$IL ; \ 277 echo -e "\t\t"'xgettext -o $$@ -j $$(I18NS) ;\' >> $$IL ; \ 278 echo -e "\t"'else \' >> $$IL ; \ 279 echo -e "\t\t"'xgettext -o $$@ $$(I18NS) ;\' >> $$IL ; \ 280 echo -e "\t"'fi ;\' >> $$IL ; \ 281 echo -e "\t"'touch $@ ;\' >> $$IL ; \ 282 echo -e "\t"'echo " -=> POT: $@"' >> $$IL ; \ 283 make -f $$IL 284 285 $(QNL_QM) : $(QNL_TS) 286 d=`dirname $@`;b=`basename $@`;echo " --==> QM: `PrelativePath $$d`/$$b" 287 lrelease $< -qm $@ 288 289 $(QNL_TS) : FORCE 290 export IL=`pwd`/qls.mk ; \ 291 export ROOT=`pwd` ; \ 292 printf "I18NS=" >$$IL ; \ 293 ( cd $(PROJET)/SRC ; make qls ROOT=$$ROOT ) ; \ 294 printf "\n\n" >>$$IL ; \ 295 echo "$@"' : $$(I18NS)' >>$$IL ; \ 296 echo -e "\t"'lupdate -noobsolete -verbose $$(I18NS) -ts $$@ ;\' >>$$IL ;\ 297 echo -e "\t"'touch $@ ;\' >> $$IL ; \ 298 echo -e "\t"'echo " -=> TS: $@"' >> $$IL ; \ 299 make -f $$IL 300 301 # nls/qls appeles de maniere recursive depuis la racine du projet dans 302 # tous les dossier du projet 303 nls: 304 if [ ! -z "$(DIR)" ] ; then \ 305 for d in $(DIR) ; do (cd $$d && make nls ROOT=$(ROOT) ) ; done ; \ 306 fi ; \ 307 if [ ! -z "$(NLS_SRC)" ] ; then \ 308 for s in $(NLS_SRC) ; \ 309 do printf " \\\\\n\t`Prelative $(ROOT) $$s`" >> $(IL) ; \ 310 done ; \ 311 fi ; \ 312 313 qls: 314 if [ ! -z "$(DIR)" ] ; then \ 315 for d in $(DIR) ; do (cd $$d && make qls ROOT=$(ROOT) ) ; done ; \ 316 fi ; \ 317 if [ ! -z "$(QNL_SRC)" ] ; then \ 318 for s in $(QNL_SRC) ; do \ 319 printf " \\\\\n\t`Prelative $(ROOT) $$s`" >> $(IL) ; \ 320 done ; \ 321 fi 322 323 FORCE: 324 325 # 326 # GESTION DES DEPENDANCES 327 # 328 %.c : FORCE 329 mkdir -p .dep/$(OS)/$(VARIANT) 330 gcc -M -o .dep/$(OS)/$(VARIANT)/$@ $(CF_$(VARIANT)) $(CFLAGS) $(CDEF) $@ 331 Pdepend $@ .dep/$(OS)/$(VARIANT)/$@ .obj/$(OS)/$(VARIANT)/$*.o 332 333 %.cpp : FORCE 334 mkdir -p .dep/$(OS)/$(VARIANT) 335 g++ -M -o .dep/$(OS)/$(VARIANT)/$@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) $@ 336 Pdepend $@ .dep/$(OS)/$(VARIANT)/$@ .obj/$(OS)/$(VARIANT)/$*.o 337 338 %.qh : FORCE 339 mkdir -p .dep/$(OS)/$(VARIANT) 340 -g++ -M -o .dep/$(OS)/$(VARIANT)/$@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) \ 341 .obj/$(OS)/$(VARIANT)/moc_$*.cpp > /dev/null 2>&1 342 Pdepend $@ .dep/$(OS)/$(VARIANT)/$@ .obj/$(OS)/$(VARIANT)/moc_$*.o 343 344 %.QH : FORCE 345 mkdir -p .dep/$(OS)/$(VARIANT) 346 -g++ -M -o .dep/$(OS)/$(VARIANT)/$@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) \ 347 .obj/$(OS)/$(VARIANT)/moc_$*.cpp > /dev/null 2>&1 348 Pdepend $@ .dep/$(OS)/$(VARIANT)/$@ .obj/$(OS)/$(VARIANT)/moc_$*.o 349 350 projet.info : $(PROJET)/.projet/info.gpl 351 PgenInfo_include.sh > $@
Date de génération : 22/09/2011 21:47