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

Abu*_*gun 6 cmake gradle android-studio ninja

-j在使用 gradle 构建 Android 应用程序时,我需要将参数传递给 ninja。(在 Windows 上)

为什么我需要这个?- 我们有巨大的统一 C++ 文件,需要大量内存才能编译。目前我没有足够的内存(约 10GB 可用)来在 8 个内核上并行编译它们。因此,当内存耗尽时,clang 会失败。

我看到 gradlecmake使用--buildkey运行,所以我试图在-j1那里添加我的arg。但似乎arguments字段仅用于 cmake 生成,因为它不会影响在构建阶段传递给 cmake 的命令行。

externalNativeBuild {
    cmake {
        cFlags "..."
        cppFlags "..."
        arguments "... -- -j1"
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在看到的唯一方法是ninja用一些包装器替换-j从那里传递。但这是我想使用的最后一个选项。感谢有关如何实现这种有效方式的任何想法。

zet*_*ttd 4

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

它从 cmake 3.12.4 开始可用。

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