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.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage