将“-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
在使用 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