bio*_*007 4 android cmake ninja ndk-build
之前,我使用ndkBuld在Android上我构建本地代码的时候能够将参数传递到化妆定义要使用多个CPU内核。如果我想使用 4 个内核,我可以添加这样的东西
externalNativeBuild {
ndkBuild {
arguments "-j4", "APP_SHORT_COMMANDS=true"
abiFilters "armeabi-v7a"
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以建议我如何用 Cmake 和 Ninja 做类似的事情吗?cmake 配置是否有一些等效参数?
externalNativeBuild {
cmake {
arguments "-DANDROID_STL=c++_static"
abiFilters getAbis()
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
Ninja 也支持相同的参数:
$ ninja --help
usage: ninja [options] [targets...]
[...]
options:
[...]
-j N run N jobs in parallel [default=10, derived from CPUs available]
[...]
Run Code Online (Sandbox Code Playgroud)
compile和link工作现在,如果你想要更多的粒度。例如,如果您想限制同时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'
Run Code Online (Sandbox Code Playgroud)
现在,如果您的项目最终产生了其他自己正在使用 ninja 构建项目的子进程,您将必须:
使用包含 Job Server 支持的 ninja 分支,就像在make. 相关的 GitHub 版本中也提供了二进制文件。见https://github.com/kitware/ninja#readme
确保子项目也配置了相同的-DCMAKE_JOB_选项
这意味着你可以尝试这样的事情:
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()
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,这似乎是 NDK 中的一个错误/缺少的功能。我和一些“NDK Google 员工”交谈过,他们也无法帮助我。希望后续版本的 NDK/AS 能够支持它。
以下是您可以跟踪进度的问题:
https://github.com/android-ndk/ndk/issues/983
和
https://issuetracker.google.com/issues/137878831
| 归档时间: |
|
| 查看次数: |
4079 次 |
| 最近记录: |