2012-10-25 27 views
32

CMake betiğimde, sistemimde bir dosyam var mı ve onunla bir şey yapıp yapmadığımı görmek istiyorum, aksi halde varsayılan bir dosyayla bir şeyler yapın. İşte kodu:CMake bir yerel dosya olduğunu kontrol edin

Fakat öyle görünüyor ki, bu çalışmıyor.

CMake'te bir dosya olup olmadığını kontrol etmenin uygun yolu nedir?

cevap

89

uygun yolu, kontrol basitçe:

if(EXISTS "${ROOT}/configuration/${customer}/configuration.${project_name}.xml") 
    ... 
else() 
    ... 
endif() 
+0

[belgeler burada (https://cmake.org/cmake/help/v3.5/command/if.html?highlight=EXISTS) – teivaz

7

sadece docs itibaren

if(NOT ${project_name}_${customer}_config) 

kullanmak gerekir: sabit, YES, ON, Y DOĞRU 1 ise

if(<constant>)

Doğru, ya da sıfır olmayan sayı. Sabit 0, OFF, NO, FALSE, N, IGNORE, "" ise veya '-NOTFOUND' ekinde biterse false. Dosya find_file kullanarak bulundu ise

Ancak, değer önbelleğe ve CMake müteakip çalışır tekrar bulmaya olmayacaktır. find_file çağrı öncesinde, her kaçak yeniden denetler zorlamak için yapın: Bir dosya varsa zaten dosyanın tam yol adını biliyorsanız

unset(${project_name}_${customer}_config CACHE) 
2

if (EXISTS <path>)'un iyi bir çözüm olduğuna inanıyorum. Yakın zamanda karşılaştığım bir senaryoyu paylaşmak istiyorum, ancak bu senaryoyu çoğu durumda umursamayacaksınız.

Lütfen dosya, etkin kullanıcı tarafından erişilemiyorsa bu çözüm doğru olmayacaktır. Dosya mevcut, ancak okunabilir değil.

böyle result kontrol sonra dosyanın gerçekten var ya da olmasın, execute_process(COMMAND ls /dev/fb0 RESULT_VARIABLE result OUTPUT_QUIET ERROR_QUIET) aramaya olup olmadığı hakkında bakım ve eğer bu senaryo için bir geçici çözüm:

if (result) 
    message("/dev/fb0 doesn't exist.") 
endif() 

düzenlemek: execute_process içinde ERROR_QUIET eklemek veya Dosya mevcut olmadığında ls'den hata mesajları alırsınız.

İlgili konular