Android.mk информация о функции вывода выводит только одну строку

#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. Спасибо за комментарий, я полностью согласен с вами, хотя моя проблема / вопрос не может быть решена. Голосую за вас.