Newsgroup: it.comp.os.linux.development
Titolo: trouble-make-er

ciao a tutti,
ho un problema con make che mi sta facendo impazzire! questo è il Makefile:
<Makefile>
CC	?= /usr/local/gcc-3.4.6/bin/gcc
CXX	?= /usr/local/gcc-3.4.6/bin/g++
CXXDIR = $(HOME)/src/cxxtest
CXXFLAGS = -Wall -I $(CXXDIR) -I .. -g -I $(HOME)/src/orion/ -I $(HOME)/LeoLight
TESTGEN = $(CXXDIR)/
cxxtestgen.pl
TESTGENFLAGS = --error-printer
TESTS_HEADER = $(wildcard *test*.h)
TESTS_SOURCE = $(TESTS_HEADER:.h=.cpp)
TESTS = $(basename $(TESTS_HEADER))
LDLIBS=
CC=$(CXX)
DEPS = $(TESTS_SOURCE:.cpp=.dep)
%.cpp: %.h
	$(TESTGEN) $(TESTGENFLAGS) -o $@ $<
%.dep: %.cpp
	$(CXX) $(CXXFLAGS) -M $< > $@
.PHONY: all
.PHONY: clean
.PHONY: test
clean:
	$(RM) $(TESTS) *.ii *.s *~ *.o
logcirtest: logcirtest.o ../src/logcir_lamp_event.o
logcirtest2: logcirtest2.o ../src/logcir_lamp_evaluate.o
logcirtest_step: logcirtest_step.o ../src/logcir_step.o
logcirtest_step_state_eval: logcirtest_step_state_eval.o 
../src/logcir_step_state_eval.o \
	../src/logcir_step.o
tabalrmtest: tabalrmtest.o ../src/tabalrm.o
areamutextest: areamutextest.o ../src/areamutex.o
sensorboxtest: sensorboxtest.o ../src/sensorbox.o
test: $(TESTS)
	-for test in $(TESTS) ; do echo "running $$test" ; ./$$test ; done
</Makefile>
il problema: tutti i file di $(TESTS) vengono creati correttamente tranne 
sensorboxtest. Per questo, infatti, il make si ostina a voler creare il file 
../src/sensorbox.o che già esiste, alla stregua di ../src/sensorbox.o e di 
../src/areamutex.o che infatti non cerca di ricreare. Si può sapere che 
diavolo gli prende? perchè proprio quello? addirittura cerca prima di creare 
il file ../src/sensorbox.cpp (anch'esso già esistente) secondo la regola 
"%.cpp: %.h" che ho inserito in questo Makefile.
Io oramai sono "clueless", come si suole dire :(
-- 
SF
Facciamo quello per cui siamo stati addestrati, per cui siamo stati cresciuti, 
per cui siamo nati. Niente prigionieri, nessuna pietà. Inizio memorabile.

 
]zac[
So che sono un prodotto '''satanico''' e di difficile impatto, ma è il caso
di usare gli autotools (automake, autoconf, ecc.), magari copiando il tutto
da un piccolo progetto di altri.
Il grosso vantaggio è la portabilità sulle varie piattaforme, l'adattamento
e il check automatico delle varie versione delle librerie/compilatori/ecc.,
la 'facile' aggiunta di altri 'pezzi', le funzioni di
installazione/disinstallazioni, la gestione dell'eventuale traduzione e
documentazione, ecc. .
Scrivere direttamente il makefile, a parte precise situazioni, mi sembra una
pessima soluzione.

 pessima soluzione.
Ci sono casi in cui, purtroppo, e' una necessita', ad esempio, se si ha 
un preprocessor che converte i files da un formato custom a header e 
file C++, e bisogna ovviamente considerare (globalmente nel progetto) le 
dipendenze dai files GENERATI, ma anche considerare le modifiche ai file 
che il preoprocessor elaborati...
Ho guardato un po` autotools e jam (forse troppo superficialmente), ma 
non sono riuscito a trovare qualcosa che possa permettermi di evitare di 
scrivermi a mano i makefile... Tra l'altro quando i progetti crescono 
diventa sempre piu` pericoloso, perche` se fare un "make clean" se non 
si e` sicuri che le dipendenze siano gestite bene costa poco su un 
progetto piccolo, su un progetto grosso....
Qualcuno puo` darmi un link o qualche dritta su come usare un sistema di 
build "automatico" in presenza di preprocessori custom? :)
Bye,
  Gabry

 build "automatico" in presenza di preprocessori custom? :)
]zac[
So che gli autotools consento di agganciarsi via 'hook' ai vari stadi delle
funzioni lanciate da make, so che è possibile fare delle prelaborazioni, so
che è possibile riscrivere le varie funzioni, però di semplice non conosco
niente. l'unico progetto che fa qualcosa di simile è la gestione di kde, ma
non ho capito niente di come funziona.
Forse potresti inserire le cose da processare in una directory con un
make/automake specifico per quel tipo di prelaborazione.