2011-02-03 13 views
7

To ze skryptu bash Kiedyś zbudować program:c makefile z poleceń powłoki i zmiennych

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 

I zmienia się z użyciem build.sh do 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 

But plik version.h kończy się w ten sposób:

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

Nie mogę poprawnie odczytać zmiennych powłoki. Myślę, że to dlatego, że w końcu są one varsami Makefile. Jeśli ktoś wie, jak to zrobić, nie miałbym pojęcia, jak to zrobić. Wielkie dzięki.

Odpowiedz

9

Należy pamiętać, że każde polecenie jest uruchamiane we własnej powłoce, więc polecenie dateString i rewizja zostaną anulowane w trzeciej i czwartej komendzie.

Używa się więc średników i odwrotnych ukośników na końcu każdej linii, aby było to jedno polecenie. Musisz również użyć $$, aby odnieść się do $ $ powłoki.

Lub nie używaj zmiennych pośrednich, wtedy nie będziesz potrzebować go jako jednego polecenia. Coś takiego:

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

Doskonale, że wykonała zadanie, dzięki kupo. Dziękuję również Paulowi za odpowiedź. –

+0

Należy pamiętać, że ta wersja skryptu nie jest "międzynarodowa". Na przykład w języku francuskim powinieneś użyć polecenia "Révision" (zwróć uwagę na akcent). – Gui13

+0

Jeśli masz plik wykonywalny 'svnversion', możesz bezpośrednio zamienić swoje długie' svn info | grep ... "przez to. Daje ci bezpośrednio wersję. – Gui13

Powiązane problemy