gpt4 book ai didi

android - 使用 Cmake 和 Ninja 限制 ndkBuild 的 CPU 内核

转载 作者:行者123 更新时间:2023-12-03 20:16:52 26 4
gpt4 key购买 nike

以前,当我使用 ndkBuld 在 Android 上构建 native 代码时,我能够传递一个参数来 make 定义要使用的 CPU 内核数量。如果我想使用 4 个内核,我可以添加类似这样的内容

externalNativeBuild {
ndkBuild {
arguments "-j4", "APP_SHORT_COMMANDS=true"
abiFilters "armeabi-v7a"
}
}

有人可以建议我如何用 Cmake 和 Ninja 做类似的事情吗? cmake配置是否有一些等效参数?
externalNativeBuild {
cmake {
arguments "-DANDROID_STL=c++_static"
abiFilters getAbis()
}
}

谢谢。

最佳答案

控制忍者并行度

Ninja 也支持相同的参数:

$ ninja --help
usage: ninja [options] [targets...]

[...]

options:
[...]

-j N run N jobs in parallel [default=10, derived from CPUs available]

[...]

控制忍者并行度微分 compilelink工作

现在,如果你想要更多的粒度。例如,如果您想限制并发的数量 link jobs , 或 compile jobs , 或两者。

从 CMake 3.11 开始,现在可以限制 compile 的数量和/或 link工作。

然后,您可以使用以下选项配置您的项目:
-DCMAKE_JOB_POOL_COMPILE:STRING=compile
-DCMAKE_JOB_POOL_LINK:STRING=link
'-DCMAKE_JOB_POOLS:STRING=compile=5;link=2'

现在,如果您的项目最终产生了其他正在使用 ninja 构建项目的子进程,您将不得不:
  • 使用包含 Job Server 支持的 ninja 分支,就像在 make 中所做的那样.相关的 GitHub 版本中也提供了二进制文件。见 https://github.com/kitware/ninja#readme
  • 确保子项目也配置了相同的-DCMAKE_JOB_选项

  • 在 externalNativeBuild 的上下文中

    这意味着你可以尝试这样的事情:
    externalNativeBuild {
    cmake {
    arguments "-DANDROID_STL=c++_static -DCMAKE_JOB_POOL_COMPILE:STRING=compile -DCMAKE_JOB_POOL_LINK:STRING=link '-DCMAKE_JOB_POOLS:STRING=compile=5;link=2'"
    abiFilters getAbis()
    }
    }

    关于android - 使用 Cmake 和 Ninja 限制 ndkBuild 的 CPU 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51557585/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com