【发布时间】:2013-09-29 04:34:18
【问题描述】:
我正在使用 mm 命令在 Android 源代码中构建自定义模块。
当我运行mm clean时,似乎整个项目都被清理了。
如何将清理限制为仅当前模块?
【问题讨论】:
标签: android makefile android-build
我正在使用 mm 命令在 Android 源代码中构建自定义模块。
当我运行mm clean时,似乎整个项目都被清理了。
如何将清理限制为仅当前模块?
【问题讨论】:
标签: android makefile android-build
使用mm -B,会全部rebuild,相当于clean 然后make。
【讨论】:
mm -B,但得到了Unknown option: -B——在 AOSP 8.1 上 mm 是否发生了某种变化?
不使用 mm 的另一种方法是从 Android 源代码的根目录中提供 make clean-<target name>。
同样,您可以使用 make <target name> 单独构建所需的模块
【讨论】:
make 将跟踪整个树中的所有构建文件 (*.mk)。子目录中的mm 只会跟踪该目录中的构建文件。这是一个重要的区别,因为跟踪所有 make 文件非常耗时,有时还容易出错。
mm 时无法识别某些构建依赖项。我经常发现有人根据他们的构建通过mm 提交补丁,但在根级别会失败。
在旧的基于 make 的 AOSP 构建系统上,使用
mm -B
重建模块。
在较新的基于 Ninja+Soong 的 AOSP 构建系统上,-B 似乎不再有效。它给出了错误Unknown option: -B。
一种可能的替代方法是使用 NINJA_ARGS 环境变量将额外的 Ninja 参数传递给底层构建引擎。
例如,以下命令删除所有输出和中间文件:
NINJA_ARGS="-t clean" mm
在这种情况下,clean 是 Ninja 构建系统的额外工具。其他工具见https://ninja-build.org/manual.html#_extra_tools。
需要注意的一点是,clean 工具似乎清除了模块的所有依赖项,而不是模块本身。我还没有找到一种方法来分配规则以将清理范围仅限于模块。
参考:https://android.googlesource.com/platform/build/soong/+/HEAD/docs/best_practices.md
【讨论】:
make <lib> 2>&1 | grep -e "install"
这将生成并打印所有重新编译的库。
【讨论】:
在模块名称前加上“clean-”前缀将在 Android 中进行干净构建
例如, m clean-libskia
【讨论】: