Birçok alt projeyle birlikte bir CMake projem var. Her biri, bazı belirli bilgileri içeren küçük bir metin dosyası oluşturmak için sağladığım bir işlevi kullanabilir (add_custom_command öğesini arayarak). Son adımda, tüm bu dosyaları bir büyük metin dosyasına birleştirmek istiyorum.CMake: add_custom_command'a bağımlılığı dinamik olarak ekle
Oluşturulan dosyaları (hepsi bir arada) arayarak bunları birleştiren özel bir komut oluşturdum. Sorun şu ki, bu son adım, ne kadar dosya sağlanacağını bilmediğim halde alt projelerde yapılan küçük adımların tümüne bağlı kalmak istiyorum.
Benim son komutu benziyor:
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/)
ve benim oluşturmak-küçük metin dosyası-için-her-alt proje komutu gibi görünür:
add_custom_command(OUTPUT /path/${sub_project_name}.txt
COMMAND create /path/${sub_project_name}.txt)
Ve o küçük dosyalar oluştururken "combination.txt" yapmak için gibi /path/${sub_project_name}.txt bağlıdır şey yapmak istiyorum
Yani isterdim:
add_dependency(combination.txt /path/${sub_project_name}.txt)
Ancak bu yalnızca hedefler için çalışır.
Ben de OBJECT_DEPENDS ile set_source_files_properties kullanmayı denedim ama (belki onun add_target en cpp dosyalarla kullanılacak niyetinde?)
son yolu olsun ben görmek işe çalışmıyor gibi görünüyor tüm bu küçük dosyaları yolları birikir ve daha sonra bu gibi kullanmak olacak bir önbellek değişkeni kullanmaktır:
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/
DEPENDS ${all_small_files_list})
ama bu yapmak istediğim son şey.
Bu, tam olarak beklendiği gibi değil, aynı şekilde çalışacaktır: Her ne zaman yaptığım, tüm hedefler (kombinasyon, proje ve proje2) yeniden oluşturulacak - dosyalar yeniden oluşturulacak. Bu, olabildiğince güzel değil;) Benim için beklenen davranış, gerekli olmadıkça herhangi bir dosyayı yeniden oluşturmamaktır. CMake'in belgelerine göre - add_custom_target her zaman üretiliyor. Keşke add_custom_command olarak çalışan bir çözüm bulsaydım - bu yalnızca bağımlılık değiştiğinde oluşur. –
Proje.txt oluşturmak için bağımlılık olarak neler kullanıyorsunuz? Ben, cmake-doc'ın söylemek istediği şey, custom_target'in her zaman yeniden oluşturulup oluşturulmayacağını kontrol edip etmediğidir - en azından benim için böyle çalışıyor gibi görünüyor. –
Peki, nasıl yaptığımızın doğru bir şekilde okunmasından sonra, çok erken olduğumu itiraf etmeliyim. Cevabımı güncellemeye bakın. –