2011-03-11 23 views
7

add_custom_command gibi bir şey yapmak istiyorum, çıktı dosyası oluşturulan makefile bir hedef olarak. Bunu yapmak için zarif bir yolu var mı?Dosya adıyla özel bir komut eklemek için hedef olarak

Gördüğüm tüm örnekler (the cmake faq re: latex gibi), istenen çıktı dosyasının nasıl oluşturulacağını ve add_custom_target hedef oluşturmak için add_custom_command öğelerini kullanır. ör .:

add_executable (hello hello.c) 
add_custom_command(OUTPUT hello.bin 
        COMMAND objcopy --output-format=binary hello hello.bin 
        DEPENDS hello 
        COMMENT "objcopying hello to hello.bin") 
add_custom_target(bin ALL DEPENDS hello.bin) 

Ancak oluşturulan makefile hedef adı daha sonra bin yerine hello.bin fazla. Üretilen makefile içinde hello.bin kendisini bir hedef yapmanın bir yolu var mı?

çalışmıyor denedim bazı çözümler: makefile dairesel bağımlılık içinde add_custom_target(hello.bin ALL DEPENDS hello.bin) sonuçları:

  • değişen.

cevap

3

Bunu, hello.bin dosyanızı bir hedefin bir yan etkisi olarak oluşturarak yapabilirsiniz. Objcopy'den hello.bin oluşturmak yerine, hello.tmp üretirsiniz. Daha sonra bir yan etki olarak, hello.tmp'i de hello.bin'e kopyalarsınız. Son olarak, hello.tmp'inize bağlı sahte hedef hello.bin dosyasını yaratırsınız. Kod:

add_executable (hello hello.c) 
add_custom_command(OUTPUT hello.tmp 
        COMMAND objcopy --output-format=binary hello hello.tmp 
        COMMAND ${CMAKE_COMMAND} -E copy hello.tmp hello.bin 
        DEPENDS hello 
        COMMENT "objcopying hello to hello.bin") 
add_custom_target(hello.bin ALL DEPENDS hello.tmp) 

Sorun şu ki, temiz çalıştırdığınızda hello.bin temizlenmez. Çalışmak için aşağıdakileri ekleyin:

set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES hello.bin) 
İlgili konular