将“-j”参数从 gradle 传递给 ninja
Posted
技术标签:
【中文标题】将“-j”参数从 gradle 传递给 ninja【英文标题】:Passing the "-j" argument to ninja from gradle 【发布时间】:2019-07-17 10:19:53 【问题描述】:在使用 gradle 构建 android 应用程序时,我需要将 -j
参数传递给 ninja。
(在 Windows 上)
我为什么需要这个? - 我们有巨大的统一 c++ 文件,需要大量内存来编译。目前我没有足够的内存(约 10GB 可用)来在 8 个内核上并行编译它们。因此,当内存用完时,clang 会失败。
我看到 gradle 使用 --build
键运行 cmake
,所以我尝试在那里添加我的 -j1
arg。但似乎arguments
字段仅用于 cmake 生成,因为它不会影响在构建阶段传递给 cmake 的命令行。
externalNativeBuild
cmake
cFlags "..."
cppFlags "..."
arguments "... -- -j1"
我现在看到的唯一方法是将ninja
替换为一些包装器以从那里传递-j
。但这是我想使用的最后一个选项。
感谢有关如何实现这种有效方式的任何想法。
【问题讨论】:
【参考方案1】:您应该将CMAKE_BUILD_PARALLEL_LEVEL
环境变量设置为要用于构建的并发进程数。
它从 cmake 3.12.4 开始可用。
https://cmake.org/cmake/help/v3.12/envvar/CMAKE_BUILD_PARALLEL_LEVEL.html
【讨论】:
以上是关于将“-j”参数从 gradle 传递给 ninja的主要内容,如果未能解决你的问题,请参考以下文章
试图了解如何将参数从 gradle 传递到我的 shell 脚本?
通过 Gradle 运行 Java 类时传递系统属性和参数的问题