2014-09-14 19 views
5

Projem için, yüklenen bir dosyayı üreten bir komut çalıştırmak istiyorum (başka bir deyişle, oluşturulan dosya yalnızca kaynak kod değil bir veri dosyasıdır).CMake: add_custom_command öğesi yalnızca giriş değiştirildiğinde ne zaman uygulanır?

Şu anda benim 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 
) 

Bu iyi çalışır aşağıdaki var ama ALLadd_custom_target() geçirilir, çünkü komut ben make her çalıştırıldığında alır.

Bunu değiştirebilmem için herhangi bir yol var mı, böylece komut sadece giriş dosyası değiştirildiğinde çalıştırılsın mı? Komutun tamamlanması biraz zaman alabilir, bu yüzden ideal olarak gerekmedikçe çalışmaz.

Şimdiden teşekkürler!

+1

'OUTPUT outputfile.txt' OUTPUT output.txt' olabilir mi? –

+0

Sorunu anlamadım. 'dosomething' inputfile.txt 'ye bağlıdır ve' output.txt 'üretmektedir, dolayısıyla 'output.txt' sadece inputfile.txt 'değiştiyse yeniden oluşturulur. Durum böyle değil mi? Yoksa bir şey özledim mi? – usr1234567

cevap

0

Doğru bu:

add_custom_command(
    OUTPUT outputfile.txt 

bununla:

add_custom_command(
    OUTPUT output.txt 

Sonra benim tahminim sen hiç bir add_custom_target gerek kalmamasıdır. Eğer yanılıyorsam, ALL'u add_custom_target'dan kaldır ve iyi olmalısın.

+0

'add_custom_target' kaldırılıyor çalışmayacak. 'ALL'yi kaldırmak, sadece talep üzerine (" her şeyi yap "dahil değildir) yapılandıracaktır. – Emil