View Full Version : [UNIX] makefile: passare data di sistema al programma compilato ?
trallallero
16-06-2006, 11:26
Devo compilare un programma C++ passandogli una define
della data della compilazione che corrispondera' alla versione.
(parametro -DDATA=... per ex: cc pippo.c -DDATA=06/2006 -o pippo)
in modo da aver sempre la versione aggiornata.
C'e' qualcuno in grado di farlo ?
(io lo avevo fatto 2 anni fa ma nun me ricordo proprio :muro:)
In altre parole devo:
- assegnare ad una variabile (ex: DATA) la data di sistema
(formattata mm/yyyy ma questo non e' un problema)
- passare questa variabile al programma in fase di compilazione con l'opzione -D...
se nel makefile metto:
...
DATA="`date`"
all:
cc prova.c -DDATA=$(DATA) -o p
...
non va (mi esce: cc prova.c -DDATA="`date`" -o p)
Grazie!
P.S.: lavoro su Sun ( e aggiungerei :muro: )
ilsensine
16-06-2006, 11:37
DATA=$(shell date %Y%m%d)
Devo compilare un programma C++ passandogli una define
della data della compilazione che corrispondera' alla versione.
(parametro -DDATA=... per ex: cc pippo.c -DDATA=06/2006 -o pippo)
in modo da aver sempre la versione aggiornata.Ho fatto adesso una prova su Linux:
DATA=$(shell date +%d/%m/%Y)
all:
gcc -o prova -DDATA=\"$(DATA)\" prova.cNon so se va bene sulla Sun. ;)
P.S. comunque in ANSI "C" esiste già la macro __DATE__
trallallero
16-06-2006, 11:55
DATA=$(shell date %Y%m%d)
grazie ma non va lo stesso :rolleyes:
e poi scusa ma $(...) e `...` sono la stessa cosa: esegui un comando
se poi intendevi con "shell" la shell che uso .. le ho provate tutte :muro:
DATA=$(shell date %Y%m%d)
all:
echo $(DATA)
cc -DDATA=$DATA -o p
output:
echo
cc prova.c -DDATA= -o p
come vedi DATA rimane blank
cmq grazie :)
trallallero
16-06-2006, 12:00
Ho fatto adesso una prova su Linux:
DATA=$(shell date +%d/%m/%Y)
all:
gcc -o prova -DDATA=\"$(DATA)\" prova.cNon so se va bene sulla Sun. ;)
P.S. comunque in ANSI "C" esiste già la macro __DATE__
'azz e' vero! __LINE__, __DATE__ etc :)
o forse ho usato questo 2 anni fa ? (e qui posso rispondermi solo io :D )
cmq su Sun non va quello che m'hai inviato :rolleyes:
Grazie
e poi scusa ma $(...) e `...` sono la stessa cosa: esegui un comandoSì è la stessa cosa nelle shell ... ma non in un makefile! In un makefile devi usare l'apposita funzione: $(shell ...comandi...)
ilsensine
16-06-2006, 12:07
grazie ma non va lo stesso :rolleyes:
Mi sono scordato il "+":
DATA=$(shell date +%Y%m%d)
trallallero
16-06-2006, 12:11
Sì è la stessa cosa nelle shell ... ma non in un makefile! In un makefile devi usare l'apposita funzione: $(shell ...comandi...)
questo il man di make non lo dice :mbe:
Comunque in effetti su un nostro client linux funziona.
il problema di __DATE__ invece e' che ogni giorno cambia data :rolleyes:
non coincide con la data di compilazione ...
ma possbile che Sun faccia sempre le cose a modo suo ? :muro:
trallallero
16-06-2006, 12:19
Mi sono scordato il "+":
DATA=$(shell date +%Y%m%d)
ma il problema non e' la formattazione della data.
e' quando vado ad eseguire nel make il cc ... DATA e' vuota
Su linux:
gcc -o prova -DDATA=$(DATA) prova.c
output:
gcc -o prova -DDATA=16/06/2006 prova.c
funziona
Su Sun:
cc -o prova -DDATA=$(DATA) prova.c
output:
cc -o prova -DDATA= prova.c
non funziona
ilsensine
16-06-2006, 12:25
Bè devi vedere cosa cambia; innanzitutto se anche su Sun è presente "date" e con la stessa sintassi di linux; quindi potrebbe darsi che la sintassi del make di Sun sia diversa (nel qual caso ti consiglio di installare - se non lo è già - gmake della gnu, in modo da usare la stessa sintassi che usi per linux).
trallallero
16-06-2006, 12:32
Bè devi vedere cosa cambia; innanzitutto se anche su Sun è presente "date" e con la stessa sintassi di linux; quindi potrebbe darsi che la sintassi del make di Sun sia diversa (nel qual caso ti consiglio di installare - se non lo è già - gmake della gnu, in modo da usare la stessa sintassi che usi per linux).
Infatti e' diversa la sintassi, trovata sul sito della Sun:
DATA:sh = date +%d/%m/%Y
all:
cc -o prova -DDATA=$(DATA) prova.c
comunque grazie a tutti :)
P.S.: qua non si puo' installare niente (ufficialmente ;) )
questo il man di make non lo diceman make fornisce solo le informazioni sul comando make: descrizione, opzioni, ecc...
info make invece fornisce tutto il manuale completo sul make e sui makefile! ;)
Il manuale del make è disponibile anche <qui> (http://www.gnu.org/software/make/manual/) e <qui> (http://www.gnu.org/software/make/manual/html_node/Shell-Function.html#Shell-Function) spiega la funzione shell.
trallallero
16-06-2006, 14:23
man make fornisce solo le informazioni sul comando make: descrizione, opzioni, ecc...
info make invece fornisce tutto il manuale completo sul make e sui makefile! ;)
no guarda, qui e' tutto strano, siamo in un mondo a parte :(
info make
SINTASSI: info -f file [ -v ] [ -S out_sep ] [ -s in_sep ] [ -0 campo_0 ] [ -1 campo_1 ] .... [ 0|1|2|3|4|5|6|7|8|9|10|11 ... ]
invece ho letto bene il man di make e c'e' :
:sh = Define the value of a macro to be the output of a com mand (see Command Substitutions below).
il contrario ... ma tu info dove lo lanci ? linux ? ho provato anche li ma idem ... e comunque abbiamo una versione della Adamo&Eva & Co :rolleyes:
Il manuale del make è disponibile anche <qui> (http://www.gnu.org/software/make/manual/) e <qui> (http://www.gnu.org/software/make/manual/html_node/Shell-Function.html#Shell-Function) spiega la funzione shell.
Grazie andbin ma su gnu.org non ci si puo' andare da qui :muro:
(possiamo usare gmail e scaricarci l'impossibile ma gnu.org no :doh: )
Comunque ormai ho risolto ... ma io mi chiedo ... come cacchio ho fatto 2 anni fa
visto che __DATE__ non va bene e DATA_COMP:sh = date +%d/%m/%Y
non l'ho usato senno' me lo ricorederei ? :eek:
e non me lo sto sognando, ho controllato il main.cc e c'e'
ancora l'istruzione:
#ifdef COMPILE_DATE
strcat( Msg, COMPILE_DATE );
#else
strcat( Msg, "02/2004" );
#endif
boh :confused: le vie dell'informatica sono infinite :D
no guarda, qui e' tutto strano, siamo in un mondo a parte :( Ehhh ... questo lo immaginavo. ;) Penso che ci siano parecchie differenze tra Linux e Solaris. Io però non ho mai avuto modo di lavorare con quest'ultimo, quindi ... non saprei dirti di più.
trallallero
16-06-2006, 14:51
Ehhh ... questo lo immaginavo. ;) Penso che ci siano parecchie differenze tra Linux e Solaris. Io però non ho mai avuto modo di lavorare con quest'ultimo, quindi ... non saprei dirti di più.
piano piano la banca sta mollando queste dannate Sparc per passare a Linux ,,, certe filiali hanno ormai solo clients Linux ... anche perche' le Sparc costano un fottio di $
comunque e' 3 anni che sto qui e mi son fatto un'esperienza notevole su Unix :cool:
ringrazio ancora, anche oggi s'e' imparato qualcosa :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.