将“-j”参数从 gradle 传递给 ninja

Passing the "-j" argument to ninja from gradle

在使用 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。但这是我想使用的最后一个选项。 感谢任何关于如何实现这种有效方式的想法。

您应该将 CMAKE_BUILD_PARALLEL_LEVEL 环境变量设置为要用于构建的并发进程数。

从 cmake 3.12.4 开始可用。

https://cmake.org/cmake/help/v3.12/envvar/CMAKE_BUILD_PARALLEL_LEVEL.html