0

我在 Android.mk 中使用了一些 shell 命令,比如

$(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'

有谁知道如何解决这一问题?

4

1 回答 1

2

GNU Make 根本不可能做到这一点,因为 $(shell ) 的输出总是以用空格替换换行符的方式扩展。顺便说一句,这是故意的。

一般来说,使用 $(shell ...) 命令对文件系统进行任何类型的更改都是一个坏主意,因为当 GNU Make 稍后尝试计算依赖项/要运行的操作时,其中一些更改对 GNU Make 是不可见的。在某些情况下,这可能会导致不可预知的行为。

于 2014-07-08T07:33:47.407 回答