Also ich versuche, ein Makefile für die Verwendung mit QuestaSim und Systemverilog-Dateien zu schreiben. Wenn Sie nicht wissen, was das ist (und die meisten Leute nicht), dann machen Sie sich keine Sorgen, das ist nicht relevant für mein Problem.Wie schreibe ich ein Makefile, in dem sich die kompilierten Objektdateien in einem anderen Verzeichnis mit einem anderen Namen befinden?
Ich habe ein Projekt Direktor enthält: src/Arbeit/Makefile
das src/Verzeichnis enthält mehrere Verzeichnisse, die jeweils Quelldateien enthalten.
Das Work/Verzeichnis existiert zunächst nicht und wird vom Makefile erstellt.
Wenn ich meinen "Compiler" anrufe, der vlog heißt, wird in einer .sv-Datei ein Verzeichnis im Arbeitsordner mit demselben Namen wie die .sv-Datei ohne das Suffix erstellt. In diesem Verzeichnis sind drei Dateien, die ich als meine "Objekt" Datei verwenden werde _primary.dat.
So zum Beispiel, ruft "vlog src/interface/my_interface.sv" erstellt (wenn es gelingt) arbeiten /my_interface/_primary.dat
Meine .sv Dateien müssen auch in einer bestimmten Reihenfolge erstellt werden, und ich möchte nur, um sie kompilieren, wenn die Quelldatei oder eine ihrer Abhängigkeiten geändert hat.
ich drehen kann der Pfad zur .sv-Datei in den Pfad zur entsprechenden _primary.dat-Datei mit "$ (addsuffix /_primary.dat, $ (addprefix $ (VLIB_DIR) /, $ (Basisname $ (notdir $ (SRC))))) "Aber das Gegenteil ist unmöglich, da wir die Verzeichnisstruktur verlieren.
Also ich denke, was ich will ist eine Art von Karte aus Objekt -> src. Also in meinem $ (OBJ): Ziel kann ich "vlog $ (getsrc $ @)" machen.
Danach muss ich mit der Kompilierreihenfolge und Abhängigkeiten beschäftigen, aber ich kann das wahrscheinlich ausarbeiten.
Irgendwelche Vorschläge?
1) Besteht die Gefahr von Quellennamen Kollisionen? Das heißt, wenn es eine 'src/interface/foo.sv' gibt, kann es auch eine' src/engine/foo.sv' geben? 2) Kann 'src /' mehr als zwei Ebenen tief sein? Das heißt, könnte es eine "src/foo/bar/baz.sv" geben? – Beta
Ich habe die Anforderung, dass das Paket/Schnittstelle/Modul den gleichen Namen wie die Datei hat. Daher würden Kollisionen sowieso Kompilierungsfehler verursachen. Im Moment sind die Verzeichnisse nur zwei Ebenen tief, aber ich könnte später weitere Ebenen hinzufügen. –
Haben Sie sich jemals das Dienstprogramm 'vmake' angesehen, das mit Questa geliefert wird? –