Ich versuche folgendes zu tun. Es gibt ein Programm, nennen Sie es foo-bin
, das eine einzelne Eingabedatei einnimmt und zwei Ausgabedateien generiert. Eine stumme Makefile Regel hierfür wäre:GNU Makefile-Regel, die ein paar Ziele aus einer einzigen Quelldatei erzeugt
file-a.out file-b.out: input.in
foo-bin input.in file-a.out file-b.out
Dies ist jedoch nicht make
in keiner Weise sagen, dass beide Ziele gleichzeitig erzeugt werden. Das ist in Ordnung, wenn make
in Serie ausgeführt wird, aber wahrscheinlich Probleme verursachen wird, wenn man make -j16
oder etwas Ähnliches versucht.
Die Frage ist, ob es eine Möglichkeit gibt, eine richtige Makefile-Regel für einen solchen Fall zu schreiben? Natürlich würde es eine DAG generieren, aber irgendwie die GNU make manual nicht angeben, wie dieser Fall behandelt werden könnte.
Das Ausführen des gleichen Codes zweimal und das Generieren nur eines Ergebnisses kommt nicht in Frage, weil die Berechnung Zeit benötigt (Denken: Stunden). Die Ausgabe von nur einer Datei wäre auch ziemlich schwierig, da sie häufig als Eingabe für GNUPLOT verwendet wird, die nicht weiß, wie sie nur mit einem Bruchteil einer Datendatei umgehen soll.
Eigentlich gibt ein Problem mit diesem ist. Wenn 'file-b.out' wie angegeben erstellt und dann mysteriös gelöscht wurde, kann' make' es nicht wiederherstellen, da 'file-a.out' immer noch vorhanden ist. Irgendwelche Gedanken? – makesaurus
Wenn Sie mysteriös 'file-a.out' löschen, funktioniert die obige Lösung gut. Dies deutet auf einen Hack hin: Wenn nur einer von a oder b vorhanden ist, sollten die Abhängigkeiten so angeordnet werden, dass fehlende Dateien als Ausgabe von "input.in" angezeigt werden. Ein paar '$ (widcard ...)' s, '$ (filter ...)' s, '$ (filter-out ...)' s, sollten den Trick machen. Pfui. – bobbogo
P.S. 'foo-bin' erstellt offensichtlich zuerst eine der Dateien (mit Mikrosekundenauflösung), so dass Sie sicherstellen müssen, dass Sie die richtige Reihenfolge der Abhängigkeiten haben, wenn beide Dateien existieren. – bobbogo