2014-09-14 4 views
5

Für mein Projekt würde ich gerne einen Befehl ausführen, der eine Datei generiert, die installiert ist (mit anderen Worten, die generierte Datei ist nur eine Datendatei, kein Quellcode).CMake: Wie kann man add_custom_command nur ausführen, wenn die Eingabe geändert wird?

Im Moment habe ich die folgenden in meinem CMakeLists.txt

add_custom_command(
    OUTPUT outputfile.txt 
    COMMAND dosomething ${CMAKE_CURRENT_SOURCE_DIR}/inputfile.txt 
         ${CMAKE_CURRENT_BINARY_DIR}/output.txt 
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/inputfile.txt 
) 

add_custom_target(
    run_gen_command 
    ALL 
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output.txt 
) 

install(
    FILES ${CMAKE_CURRENT_BINARY_DIR}/output.txt 
    DESTINATION ${CMAKE_INSTALL_DATADIR}/somewhere 
) 

Dies funktioniert gut, aber weil ALL zu add_custom_target() übergeben wird, wird der Befehl jedes Mal, wenn ich make laufen ausgeführt.

Gibt es eine Möglichkeit, dies zu ändern, so dass der Befehl nur ausgeführt wird, wenn die Eingabedatei geändert wird? Es kann eine Weile dauern, bis der Befehl abgeschlossen ist. Im Idealfall wird er nur ausgeführt, wenn es erforderlich ist.

Vielen Dank im Voraus! diese

+1

'OUTPUT outputfile.txt' kann' OUTPUT output.txt' sein? –

+0

Ich bekomme Ihre Frage nicht. 'dosomething' hängt von' inputfile.txt' ab und erzeugt 'output.txt', daher wird' output.txt' nur dann neu generiert, wenn 'inputfile.txt' sich geändert hat. Ist das nicht der Fall? Oder habe ich etwas vermisst. – usr1234567

Antwort

0

Richtig:

add_custom_command(
    OUTPUT outputfile.txt 

mit diesem:

add_custom_command(
    OUTPUT output.txt 

Dann meine Vermutung ist, dass Sie keine add_custom_target brauchen überhaupt. Wenn ich falsch liege, entfernen Sie einfach ALL von add_custom_target, und Sie sollten in Ordnung sein.

+0

Das Entfernen von 'add_custom_target' funktioniert nicht. Durch das Entfernen von 'ALL' wird es nur auf Anfrage erstellt (nicht in' make all' enthalten) – Emil

Verwandte Themen