将“-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

通过 Gradle 运行 Java 类时传递系统属性和参数的问题

通过 Gradle 运行 Java 类时传递系统属性和参数的问题

如何将参数从 gradle exec 任务传递到命令行

将JVM args传递给SpringBoot bootRun Gradle任务[重复]