2014-09-14 16 views
5

Dla mojego projektu chciałbym uruchomić polecenie, które generuje plik, który jest zainstalowany (innymi słowy, wygenerowany plik jest tylko plikiem danych, a nie kodem źródłowym).CMake: Jak ustawić polecenie add_custom_command tylko po zmianie wejścia?

Obecnie mam następujących w moim 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 
) 

Działa to dobrze, ale ponieważ ALL jest przekazywana do add_custom_target(), komenda zostanie wykonany za każdym razem biegnę make.

Czy jest jakiś sposób, aby to zmienić, aby polecenie było uruchamiane tylko po zmianie pliku wejściowego? Komenda może trochę potrwać, więc najlepiej, aby nie była uruchamiana, chyba że jest to konieczne.

Z góry dziękuję!

+1

'OUTPUT outputfile.txt' może być' OUTPUT output.txt'? –

+0

Nie dostaję twojego pytania. 'dosomething' zależy od' inputfile.txt' i generuje 'output.txt', stąd' output.txt' jest ponownie generowany tylko po zmianie pliku 'inputfile.txt'. Czy tak nie jest? Czy też coś mi umknęło? – usr1234567

Odpowiedz

0

Poprawnie to:

add_custom_command(
    OUTPUT outputfile.txt 

z tym:

add_custom_command(
    OUTPUT output.txt 

Wtedy moje przypuszczenie jest to, że nie trzeba się add_custom_target w ogóle. Jeśli się mylę, po prostu usuń ALL z add_custom_target i powinieneś być w porządku.

+0

Usunięcie 'add_custom_target' nie będzie działać. Usunięcie 'ALL' spowoduje, że będzie on budowany tylko na żądanie (nie ma w' make all') – Emil

Powiązane problemy