2011-02-03 15 views
7

Questo è da uno script bash che ho usato per costruire un programma:c makefile con i comandi della shell e le variabili

dateString=$(date +%Y/%m/%d\ %H:%M:%S) 
revision=(`svn info | grep Revision | tr -d [:alpha:]':'`) 
echo "#define VERSION_DATE \"$dateString\""  > version.h 
echo "#define VERSION_REVISION \"$revision\"" >> version.h 

ho cambiato di utilizzare il build.sh ad un makefile:

version.h: 
    dateString=$$(date +%Y/%m/%d\ %H:%M:%S) 
    revision=(`svn info | grep Revision | tr -d [:alpha:]':'`) 
    echo "#define VERSION_DATE \"$dateString\"" > version.h.tmp 
    echo "#define VERSION_REVISION \"$revision\"" >> version.h.tmp 
    mv version.h.tmp version.h 

Ma il file version.h finisce così:

#define VERSION_DATE "\ateString" 
#define VERSION_REVISION "\evision" 

Non riesco a ottenere le variabili di shell correttamente. Penso che siano finiti per essere dei vere makefile. Se qualcuno sa come farlo, non mi dispiacerebbe sapere come. Grazie molto.

risposta

9

Ricordare che ogni comando viene eseguito nella propria shell, quindi dateString e revisione verranno disattivati ​​nel terzo e nel quarto comando.

Quindi si utilizza il punto e virgola e il backslash a ciascuna estremità della riga per trasformarlo in un unico comando. Inoltre è necessario utilizzare $$ per riferirsi a $ della shell.

Oppure non utilizzare variabili intermedie, quindi non sarà necessario che sia un comando. Qualcosa del genere:

version.h: 
    echo \#define VERSION_DATE \"$$(date +%Y/%m/%d\ %H:%M:%S)\" > version.h.tmp 
    echo \#define VERSION_REVISION \"$$(svn info | grep Revision | tr -d [:alpha:]:)\" >> version.h.tmp 
    mv version.h.tmp version.h 
+0

Eccellente, questo ha fatto il lavoro, grazie pooh. Grazie anche a Paolo per la risposta. –

+0

Si noti che questa versione dello script non è "internazionale". In francese, ad esempio, dovresti chiamare "Révision" (nota l'accento). – Gui13

+0

Se hai l'eseguibile 'svnversion', puoi sostituire direttamente il tuo lungo' svn info | grep ... 'da esso. Ti dà la revisione direttamente. – Gui13

Problemi correlati