Ich möchte tägliche Builds ausführen oder getriggerte Builds von Keil MDK-ARM-basierten Projekten einchecken/commiten. Bisher habe ich die Dinge mit der Stapeldateifunktion der IDE in Gang gebracht. Dazu müssen Sie das Projekt mindestens einmal mit der IDE erstellen und dann die Batchdatei und die zugehörigen .__i
und ._ia
von der IDE erstellten Dateien einchecken.
Darüber hinaus fügt die IDE viele benutzerspezifische Dinge in die Batchdatei ein, z. B. die Windows-PATH-Variable. Dies könnte bei mehreren Entwicklern zu einem Problem werden, da die Batchdatei zum Erstellen bei jedem Commit von einem anderen Entwickler geändert werden könnte.
Letztendlich muss man nur die verschiedenen Schalter für armcc , armasm und ArmLink im Auge behalten .
Gibt es eine Möglichkeit, ein Standard-Makefile zum Erstellen von Keil uVision-Projekten zu verwenden? Gibt es eine Methode zum Übersetzen einer uVision-Projektdatei in ein besser wartbares Build-Skript?
Dies ist die beste Methode, die mir in letzter Zeit eingefallen ist:
Wählen Sie in den Build-Optionen Batch-Datei erstellen aus.
Wenn Sie einen Build von der IDE aus starten, wird basierend auf den in der IDE festgelegten Optionen eine Stapeldatei zusammen mit mehreren Textdateien erstellt. Sie müssen diese von der IDE generierten Dateien in der Quellcodeverwaltung nachverfolgen:
Dann kann foo.bat von einem Build-Skript aus gestartet werden.
Dadurch werden zwar zusätzliche Dateien erstellt, die in der Quellcodeverwaltung nachverfolgt werden müssen, wenn Sie zuverlässig aus der generierten Batchdatei erstellen möchten, es entfällt jedoch die Notwendigkeit, sich auf die Keil-Projektdatei (foo.uvproj) und die IDE zu verlassen. Ich finde es einfacher, Unterschiede zu vergleichen und somit Änderungen zu den generierten Textdateien (*.__i) zu verfolgen, die Compiler-Flags enthalten, als zur .uvproj-Datei. Außerdem ruft die Batch-Datei direkt die verschiedenen Tools armasm, armcc, armlink auf. Dies gibt Ihnen die direkte Ausgabe jedes dieser Schritte sowie ein scheinbar besseres Potenzial für die zukünftige Migration eines Projekts auf eine andere Toolkette, falls erforderlich.
Mir ist klar, dass diese Antwort sehr nach meiner ursprünglichen Frage klingt, aber ich kenne wirklich keine bessere Möglichkeit, einen Skript-Build mit den Tools von Keil auszuführen. Ich bat darum, zu sehen, was von anderen kommen könnte. Ich bin mit der Antwort von @digikata nicht ganz einverstanden, aber ich bevorzuge es, Compiler-Flags und die Speicherzuordnung in einem einfacheren Format zum Nachverfolgen zu haben und mehr Tools im Unix-Stil für die Kompilierung zu verwenden, anstatt eine All-in-One-Kompilierung zu starten mit der IDE. Ich denke, die All-in-One-Kompilierung aus der IDE funktioniert gut auf meiner Workstation, aber nicht für den Build-Server.
BEARBEITEN : Der Build-Server läuft auf Windows Server 2003. Ich muss gestehen, dass ich auf die Verwendung der IDE-Befehlszeilenschnittstelle statt einer Batch-Datei verzichtet habe. Dies wurde einfach zu schwierig zu handhaben.
Ich rufe die Keil-IDE über die Befehlszeile auf, um (keine generierte Batch-Datei) aus einem Makefile heraus zu erstellen. Normalerweise funktioniert es besser, die Projektdateien über den scm zu sperren oder eine Referenz-Build-Kopie zu nehmen und dabei die relevanten Projektnamen umzubenennen.
Die IDE arbeitet gerne mit schreibgeschützten Projektdateien. Wenn Sie sie also sperren, müssen Sie sie entsperren, um Einstellungen zu ändern, zu speichern und wieder einzuchecken. Wenn Sie ziemlich stabil sind Punkt im Projekt ist dies ziemlich gering - sogar wünschenswert.
Wenn Sie eine Referenzkopie erstellen, neigt der Build dazu, zu brechen, wenn sich die Projekteinstellungen ändern – insbesondere wenn Projektdateien hinzugefügt oder aus der Kompilierung entfernt werden. Das explizite Erfassen dieser Änderungen ist nicht unbedingt schlecht, aber es ist ein zusätzlicher Schritt, der zum Verwalten von Builds erforderlich ist.
In beiden Fällen können Sie durch Umleiten der Ausgabe in eine Protokolldatei über die Option "-o" auf das vollständige Ausgabeprotokoll zugreifen. Das Protokoll wird nicht zeilenweise ausgegeben, aber es scheinen alle vorhanden zu sein. (Ich parse das Keil-Fehlerformat tatsächlich in GNU fmt für die Integration in die Eclipse-CDT-Umgebung. Dadurch kann ich nach dem Build direkt zu Fehlern/Warnungen springen.)
Der Befehlszeilen-Build generiert auch die __i-, __ia-Dateien, sodass diese auch nicht in die Versionskontrolle für den Build-Server gehen müssen.
Hoffe das hilft.
semaj
Digikata
rmaVT
Kevin Vermeer
davidcary