Verwenden nmake mit Platzhaltern, die im makefile
Ich bin Sie versuchen, eine nmake makefile exportieren unsere balsamiq mockup-Dateien zu png-Dateien automatisch, aber ich fürchte, ich kann nicht machen Köpfe noch Schwänze wie Sie eine Allgemeine Regel dafür, so zu tun, ohne ausdrücklich eine Auflistung aller Dateien, die ich exportiert werden sollen.
Auf dieser Seite details der Befehlszeilen-syntax für das exportieren der Dateien, und auf dieser Seite enthält ein Beispiel, die wie es aussieht, enthält eine Allgemeine Regel für .obj-Dateien zu .exe-Dateien.
Makefile, die ich bisher versucht habe sieht so aus:
.bmml.png:
"C:\Program Files\Balsamiq Mockups\Balsamiq Mockups.exe" export $< $@
Aber das funktioniert nicht.
Wenn ich einfach nur laufen nmake (mit einigen veralteten png-Dateien), nmake gerade tut:
[C:\Temp] :nmake
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
[C:\Temp] :
Wenn ich es Frage, um eine bestimmte Datei, tut es das auch:
[C:\Temp] :nmake "TestFile.png"
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
NMAKE : fatal error U1073: don't know how to make '"TestFile.png"'
Stop.
[C:\Temp] :
Jedem nmake-gurus da draußen, die können mich gerade?
Beispiel makefile, das macht einfach .dat-Dateien aus .txt-Dateien, indem Sie Sie kopieren, zu Experimentieren mit, sieht wie folgt aus:
.txt.dat:
copy $< $@
dieser tut da auch nichts, also ganz klar ich bin nicht zu verstehen, wie eine solche generische Regeln funktionieren. Muss ich zu geben ein Ziel vor, dass irgendwie listet die Dateien, die ich will?
Bearbeiten: In der Antwort auf die neue Antwort:
Diese makefile:
{}.txt{}.dat:
copy $** $@
mit dieser Datei (test.dat)
1
2
3
und mit diesem Befehl:
NMAKE test.txt
Erzeugt diese Fehlermeldung:
[C:\] :nmake test.txt
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
NMAKE : fatal error U1073: don't know how to make 'test.txt'
Stop.
Du musst angemeldet sein, um einen Kommentar abzugeben.
NMAKE-Muster-Regeln sind viel wie GNU-make old-school-suffix-Regeln. In Ihrem Fall, Sie hatte es fast richtig, um mit zu beginnen, aber Ihnen fehlten die .SUFFIXE Erklärung. Zum Beispiel:
Ich denke, das ist nur ein Teil der Lösung, obwohl, weil Sie erwähnte auch vermeiden wollen, dass sich explizit mit einer Liste aller Dateien umgewandelt werden. Leider weiß ich nicht, der eine sehr saubere Art, das zu tun, NMAKE, da es erweitert nur die Platzhalter, die in Abhängigkeit Listen, und was Sie wirklich wollen in Ihrem dependency-Liste ist nicht die Liste der Dateien, die bereits vorhanden sind (die *.bmml-Dateien), aber die Liste der Dateien, die erstellt werden, von denen Dateien (*.png-Dateien). Trotzdem denke ich, können Sie Ihr Ziel erreichen mit einem rekursiven Aufruf NMAKE wie diese:
Hier, NMAKE erweitern
*.bmml
im prereq Liste fürall
in der Liste .bmml-Dateien in das Verzeichnis, und dann wird es beginnen, eine neue NMAKE-instance, unter Angabe der Tore zu bauen, die Liste der Dateien mit allen Instanzen der.bmml
ersetzt durch.png
. Also, setzen Sie alle zusammen:Ist, wenn ich Dateien Test1.bmml und Test2.bmml und führen Sie dann das makefile, bekomme ich die folgende Ausgabe:
Natürlich, wenn Sie sehr viele von diesen .bmml-Dateien, Sie kann in Konflikt geraten Länge der Befehlszeile Einschränkungen, so watch out dafür. In diesem Fall, empfehle ich entweder das explizite auflisten der Quelldateien, oder mit einem mehr fähig, make-tool, wie z.B. GNU make (das ist für Windows verfügbar in einer Vielzahl von Formen).
copy $< $@
, dann wird es auch schaffen, die Ziele zu erreichen. In diesem Fall ist es nicht unnötig wieder aufzubauen up-to-date-Ziele.makefile
, dann müssen Sie-f
im rekursiven Aufruf auch.Wird diese Arbeit für Sie? Setzen Sie diese in der Datei MAKEFILE.:
Führen:
Habe ich nicht Balsamiq, so kann ich das nicht testen, aber in meinem Fall, wenn ich mit dem folgenden MAKEFILE.:
und führen
nmake /A
in einem Ordner mit myFile.txt erstellen myFile.dat.