Mam projekt CMake z wieloma podprojektami. Każdy z nich może użyć funkcji I provide, aby wygenerować mały plik tekstowy z pewnymi określonymi informacjami (przez wywołanie add_custom_command). Na ostatnim etapie chciałbym połączyć wszystkie te pliki w jeden duży plik tekstowy.CMake: dodaj zależność do add_custom_command dynamicznie
Utworzono niestandardowe polecenie, które wyszukuje utworzone pliki (wszystko w jednym miejscu) i łączy je.
Problem polega na tym, że chciałbym, aby ten ostatni krok był zależny od wszystkich małych kroków wykonywanych w podprojektach, podczas gdy ja właściwie nie wiem, ile plików zostanie dostarczonych.
Moja ostatnia komenda wygląda tak:
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/)
i mój create-mały-text-file-for-each-podprojekcie polecenia wygląda następująco:
add_custom_command(OUTPUT /path/${sub_project_name}.txt
COMMAND create /path/${sub_project_name}.txt)
i kiedy tworzę tych małych plików Chciałbym zrobić coś takiego zrobić „combination.txt” zależą /path/${sub_project_name}.txt
Tak bym chciał:
add_dependency(combination.txt /path/${sub_project_name}.txt)
Jednak działa to tylko w przypadku celów.
Próbowałem również użyć set_source_files_properties z OBJECT_DEPENDS, ale wydaje się, że nie działa (być może jego zamiar być używane z plików cpp add_target jest?)
Ostatnim sposobem, aby to działało to widzę aby użyć zmiennej cache, które gromadzić wszystkie te małe pliki ścieżek, a następnie używać go tak:
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/
DEPENDS ${all_small_files_list})
ale jest to ostatnia rzecz, którą chcesz zrobić.
Będzie działał, ale nie będzie dokładnie taki, jak powinien: Za każdym razem, gdy nazywam make, wszystkie cele (kombinacja, projekt i projekt2) zostaną przebudowane - pliki będą podlegać regenracji. To nie jest tak ładne, jak mogłoby być;) Spodziewanym zachowaniem jest dla mnie, aby nie odtwarzać żadnych plików, chyba że jest to konieczne. Zgodnie z dokumentami CMake - add_custom_target jest budowany za każdym razem. Chciałbym mieć rozwiązanie działające jako add_custom_command - które buduje tylko wtedy, gdy zmieni się jakakolwiek zależność. –
Co używasz jako zależności do generowania pliku project.txt? Wiem, co chciałby powiedzieć docet-doc, jest to, że custom_target jest zawsze sprawdzane, czy musi zostać przebudowane, czy nie - przynajmniej wydaje się, że działa tak dla mnie. –
Cóż, po odpowiednim przeczytaniu tego, jak to robimy, muszę przyznać, że byłem zbyt wcześnie. Zobacz moją aktualizację odpowiedzi. –