Forum: PC Hard- und Software Makefile, Cygwin und Co


von Simon K. (simon) Benutzerseite


Lesenswert?

Hallo Leute,
Ich habe im Moment folgendes Problem. In einem MAKEFILE von einem AVR 
Projekt habe ich folgende Zeile mal eingebaut um das Build-Datum in den 
Code zu bringen:

BUILD_DATE   = $(shell date +'\"%y%m%d\"')

Alles lief immer hervorragend (das Bauen lief unter XP sowohl aus der 
Windows Kommandozeile, als auch aus Eclipse mit dem AVR Plugin super).

Unter Windows 7 sieht das Ganze schon deutlich anders aus. Aus 
irgendwelchen Gründen (Cygwin, Eclipse, Windows?) will Windows 7 dort 
immer das builtin "date" aus der Windows Kommandozeile dort ausführen, 
was natürlich nicht klappt.

Ich habe bereits versucht den Cygwin Binaries Pfad in der Windows-PATH 
Variable nach ganz vorne zu schaffen, aber das half auch nicht (war mir 
irgendwie auch klar).

Bin da etwas hilflos. Gibt es irgendeinen einfachen Hack, das MAKEFILE 
anzuweisen, dass es "date" aus Cygwin/bin benutzt?

Viele Grüße für irgendwelche Tipps. Hoffe das reicht so an Infos. Bei 
Google scheinen erstaunlich wenig Leute Probleme mit solchen "Datei 
Konflikten" zu haben, oder ich finde nicht die richtigen Suchbegriffe.

Manchmal ist etwas von .profile die Rede, aber ich möchte ungern jedem, 
der das Teil kompilieren will zumuten, in Cygwin herumzupfuschen.

Viele Grüße

von nichtGast (Gast)


Lesenswert?

Ich habe das date.exe aus dem Cygwin bzw. WinAVR einfach in unixdate.exe 
umbenannt und den Aufruf angeopasst

BUILD_DATE   = $(shell unixdate +'\"%y%m%d\"')

von Simon K. (simon) Benutzerseite


Lesenswert?

Danke für die schnelle Antwort. Wenn ichs umbenenne, mache ich mir ja 
die Cygwin Installation kaputt, da andere Tools unter Cygwin dann nicht 
mehr funktionieren. Ich könnte höchstens das Cygwin-date mit meinem 
Programm ausliefern...

Es geht übrigens hierum:
https://github.com/emsec/ChameleonMini/blob/master/Firmware/Chameleon-Mini/Makefile

von nichtGast (Gast)


Lesenswert?

Ich erinnere mich, ich habe eine Kopie angefertigt oder einen Link 
erzeugt.

von ich (Gast)


Lesenswert?

Simon K. schrieb:
> Wenn ichs umbenenne, mache ich mir ja
> die Cygwin Installation kaputt, da andere Tools unter Cygwin dann nicht
> mehr funktionieren.

Kannst doch eine Kopie vom Cygwin-date machen und diese Kopie dann in 
unixdate umbenennen. Dann geht alles wie bisher und dein make 
funktioniert auch.

von Simon K. (simon) Benutzerseite


Lesenswert?

ich schrieb:
> Simon K. schrieb:
>> Wenn ichs umbenenne, mache ich mir ja
>> die Cygwin Installation kaputt, da andere Tools unter Cygwin dann nicht
>> mehr funktionieren.
>
> Kannst doch eine Kopie vom Cygwin-date machen und diese Kopie dann in
> unixdate umbenennen. Dann geht alles wie bisher und dein make
> funktioniert auch.

Schon, es ist nur ärgerlich, wenn jemand erst an seiner Cygwin 
Installation herumfummeln muss um unser OpenSource Projekt zu 
kompilieren. Das kann doch nicht das Gelbe vom Ei sein :-(

von ich (Gast)


Lesenswert?

Simon K. schrieb:
> ich schrieb:
>> Simon K. schrieb:
>>> Wenn ichs umbenenne, mache ich mir ja
>>> die Cygwin Installation kaputt, da andere Tools unter Cygwin dann nicht
>>> mehr funktionieren.
>>
>> Kannst doch eine Kopie vom Cygwin-date machen und diese Kopie dann in
>> unixdate umbenennen. Dann geht alles wie bisher und dein make
>> funktioniert auch.
>
> Schon, es ist nur ärgerlich, wenn jemand erst an seiner Cygwin
> Installation herumfummeln muss um unser OpenSource Projekt zu
> kompilieren. Das kann doch nicht das Gelbe vom Ei sein :-(

Das stimmt schon. Eine Möglichkeit wäre noch, das Windows-date 
umzubenennen, dann findet es "make" nicht mehr. Aber dann muß jeman 
anderes dann auch in seinem Windows rumpfuschen. Also auch keine Lösung.
Kannst du nicht im makefile den Pfad zum cygwin/bin mit angeben beim 
Aufruf?

von Haro (Gast)


Lesenswert?

Bringt der gcc nicht eingebaute Makros mit, die dann zur Uhrzeit und 
Datum expandieren?
__DATE oder sowas in der Richtung, hab jetzt nicht ins Manual gschaut, 
aber irgendwas gibts da.

von Haro (Gast)


Lesenswert?

So, hier ists: 
http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html

Ob du das so haben willst musst du wissen. Ich finds schöner und 
einfanger direkt die Build-Ins zu nutzen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ja, das ist soweit richtig. Ich hätte aber gerne das Datum als Zahl, 
damit ich das auch vergleichen kann. Als Ersatz für eine Versionsnummer 
praktisch. Leider gibt es keine defines für Jahr, Monat oder Tag, 
sondern man muss das Standard Format von _DATE_ nutzen.

von Steffen R. (steffen_rose)


Lesenswert?

date inkl. Pfad aufrufen?
/usr/bin/date


(CYGWIN_NT-6.1-WOW64 xxx 1.7.16(0.262/5/3) 2012-07-20 22:55 i686 Cygwin)

von Konrad S. (maybee)


Lesenswert?

Evtl. ist dieser Link hilfreich:
http://www.gnu.org/software/make/manual/html_node/Choosing-the-Shell.html#Choosing-the-Shell

Lass dir mal den Wert von SHELL ausgeben.

von Simon K. (simon) Benutzerseite


Lesenswert?

Konrad S. schrieb:
> Evtl. ist dieser Link hilfreich:
> http://www.gnu.org/software/make/manual/html_node/...
>
> Lass dir mal den Wert von SHELL ausgeben.

Klasse, das ist ja genau das, was ich suche? Anscheinend brauche ich im 
MAKEFILE nur die variable SHELL auf /bin/sh zeigen lassen?

Vielen Dank! Ich werde das bei Gelegenheit mal ausprobieren und das 
MAKEFILE anpassen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Habe jetzt etwas genauer untersucht und der Übeltäter ist, dass Atmel 
ihre AVR Toolchain (ex WinAVR) so umgebaut hat, dass "make" 
standardmäßig die Windows Konsole benutzt, was ich gewissermaßen 
besch.eiden finde, weil so viele Makefiles aus WinAVR Zeiten u.U. nicht 
mehr funktionieren könnten.

Idealerweise liefert die AVR Toolchain dann auch keine weitere Shell mit 
(auch kein sh.exe).

Meine Lösung ist, dass der Benutzer dann Cygwin installieren muss (für 
die sh Shell) und ich im Makefile ganz oben

SHELL = /bin/sh

eingefügt habe. Nun geht es wieder :-)

von Stefan E. (sternst)


Lesenswert?

Simon K. schrieb:
> Meine Lösung ist, dass der Benutzer dann Cygwin installieren muss (für
> die sh Shell)

Zwei Alternativen:
http://win-bash.sourceforge.net/
http://www.mingw.org/wiki/MSYS

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.