Я хотел бы упростить рецепт BitBake, который устанавливает большую структуру каталогов, используя какую-то рекурсивную процедуру установки, а не много раз вызывая установку. Структура исходного каталога часто меняется во время разработки, что приводит к гораздо большему количеству ревизий рецептов, чем я хотел бы иметь дело.
В качестве примера, как следующий do_install() можно упростить из этого:
do_install() {
install -d ${D}/foo
install -m 0644 ${S}/foo/*.* ${D}/foo
install -d ${D}/foo/a
install -m 0644 ${S}/foo/a/*.* ${D}/foo/a
install -d ${D}/foo/b
install -m 0644 ${S}/foo/b/*.* ${D}/foo/b
install -d ${D}/foo/c
install -m 0644 ${S}/foo/c/*.* ${D}/foo/c
install -d ${D}/bar
install -m 0644 ${S}/bar/*.* ${D}/bar
install -d ${D}/bar/a
install -m 0644 ${S}/bar/a/*.* ${D}/bar/a
install -d ${D}/bar/a/bananas
install -m 0644 ${S}/bar/a/bananas/*.* ${D}/bar/a/bananas
}
К чему-то более похожему на этот псевдокод:
do_install() {
for each subdir in ${S}/foo/
install subdir recursively to ${D}/foo/subdir
end
for each subdir in ${S}/bar/
install subdir recursively to ${D}/bar/subdir
end
}
Каталоги верхнего уровня в наших исходных файлах (foo и bar в приведенном выше примере) редко изменяются, поэтому вызов их в рецепте — это нормально. Это каталоги нижнего уровня, которые часто меняются.
Может случиться так, что cp -r в конечном итоге будет правильным, но я читал, что это не одобряется в рецептах BitBake, поэтому мне интересно, предоставляет ли BitBake какой-то альтернативный механизм или есть какой-то другой разумно стандартизированный способ сделать это.