add_custom_command generiert kein Ziel
Vielleicht ist das unmöglich und ich habe das @ falsch gelescmake 3.2 Dokumentation, aber wenn ich einen benutzerdefinierten Befehl erstelle, würde ich ein benutzerdefiniertes "Ziel" im Makefile erstellen, damit ich das Ziel durch Aufrufen des Namens der Ausgabedatei erstellen kann. In den CMake-Dokumenten heißt es:
n Makefile-Begriffen erstellt dies ein neues Ziel in der folgenden Form:
OUTPUT: MAIN_DEPENDENCY DEPENDS
COMMAND
so ich dachte ich könnte dann laufenmake OUTPUT
. Vielleicht verwechselt die Dokumentation CMake-Ziele mit Makefile-Zielen?
Beispielsweise
add_custom_command(OUTPUT foo_out
COMMAND post_process foo_in > foo_out
DEPENDS foo_in
)
Ich möchte zu tu
make foo_out
und es wird @ machfoo_out
. Wenn ich dies jedoch tue, erhalte ich
make: **** No rule to make target `foo_out`. Stop.
und sicher genug, das Wort "foo_out" existiert nirgendwo in einer Datei im cmake-Binärausgabeverzeichnis. Wenn ich es in dieses @ ände
add_custom_target(bar DEPENDS foo_out)
add_custom_command(OUTPUT foo_out COMMAND post_process foo_in > foo_out)
Dann kann ich tun
make bar
nd ich kann t
make foo_in
aber ich kann immer noch nicht
make foo_out
Das Problem mitmake bar
ist, dass es nicht intuitiv ist, da die eigentliche Dateiausgabe @ ifoo_out
notbar
.
Wie mache ich das
In meinem Fall muss ich einen speziellen Verarbeitungsschritt für das ausführbare Standardziel ausführen, bei dem optionale Ressourcen in die ELF-Datei eingefügt werden. Ich hätte gerne die Möglichkeit, beide ausführbaren Dateien als Makefile-Ziele zu haben, damit ich sowohl die nackte ausführbare ELF-Datei als auch die in Ressourcen injizierte ausführbare ELF-Datei erstellen kann.
Wenn ich ein benutzerdefiniertes Makefile geschrieben habe, ist dies trivial!
foo_in: foo.c
$(CC) foo_in: foo.c
$(CC) $< -o $@
foo_out: foo_in
post_process $< > $@
lt; -o $@
foo_out: foo_in
post_process foo_in: foo.c
$(CC) $< -o $@
foo_out: foo_in
post_process $< > $@
lt; > $@
Und ich kannmake foo_in
undmake foo_out
.