#android #build #android-ndk #android-source #android.mk
#Android #сборка #android-ndk #android-исходный код #android.mk
Вопрос:
Я использую некоторые команды оболочки в Android.mk , например
$(shell rm -rfv $(TARGET_OUT)/xxx)
И я хочу видеть вывод команды во время процесса сборки. Однако вывод всегда выполняется в виде одной строки, когда я использую либо
$(info $(shell rm -frv $(TARGET_OUT)/www))
или
$(info "$(shell rm -frv $(TARGET_OUT)/www)")
Результат выглядит следующим образом
removed `out/target/product/xxx/system/xxx/xxx.xxx' removed directory: `out/target/product/xxx/system/xxx/xxx'
вместо
removed `out/target/product/xxx/system/xxx/xxx.xxx'
removed directory: `out/target/product/xxx/system/xxx/xxx'
Кто-нибудь знает, как это исправить?
Комментарии:
1. Чего вы на самом деле пытаетесь достичь? Я очень сомневаюсь
$(shell rm ...)
, что makefile — лучший выбор.2. Скопировать / удалить папку просто, по крайней мере, проще, чем написать большой список файлов и вызвать что-то вроде LOCAL_COPY_FILES
3. Да, это, вероятно, проще, но это неверно и рано или поздно доставит вам неприятности.
4. Однако, понимая риск, существует ли какой-либо простой способ скопировать большую папку с тысячами файлов в целевую?
5. Конечно, вы можете, например, использовать
PRODUCT_COPY_FILES
и сгенерировать список файлов для копирования с помощью$(wildcard ...)
или$(shell find ...)
.
Ответ №1:
В GNU Make это просто невозможно, потому что вывод $ (shell ) всегда расширяется таким образом, что новые строки заменяются пробелами. Кстати, это сделано намеренно.
Вообще говоря, вносить какие-либо изменения в файловую систему с помощью команд $ (shell …) — плохая идея, потому что некоторые из этих изменений не будут видны GNU Make, когда он позже попытается вычислить зависимости / какие действия выполнить. В некоторых случаях это может привести к непредсказуемому поведению.
Комментарии:
1. Спасибо за комментарий, я полностью согласен с вами, хотя моя проблема / вопрос не может быть решена. Голосую за вас.