总述
Ninja 是由 Google 开发用于构建 Chrome 的构建体系。他有如下特点:
- 构建速度快:Chrome 太大了,必须使用增量构建
- 适用于单体仓库(monorepo):也就是并没有第三方依赖,自包含的,封闭的项目
GN
GN 的全称是“Generate Ninja”,它才是对标 cmake 的东西,它会读取 .gn 结尾的文件(对标 CMakeLists.txt),生成 build.ninja 。有如下 CLI 命令:
gn gen <build_directory>
gn clean <build_directory>在语法方面,cmake 的语法偏向过程式,基本的单位是 command,可以在构建脚本中实现复杂精妙的逻辑;而 gn 的语法偏向声明式,其基本格式如下:
target_type("target_name") {
...
}如:
ohos_executable("ipc_server_test") {
sources = [ "./src/main_server.cpp" ]
configs = [
"$SUBSYSTEM_DIR/config:ipc_util_config",
"$IPC_TEST_ROOT:ipc_test_config",
]
deps = [ ":ipc_test_helper" ]
external_deps = [
"access_token:libnativetoken_shared",
"access_token:libtokensetproc_shared",
"c_utils:utils",
"hilog:libhilog",
"ipc:ipc_core",
"samgr:samgr_proxy",
]
part_name = "ipc"
subsystem_name = "communication"
}gn 功能相对受限。它不鼓励在构建脚本中编写复杂的逻辑。
Ninja
CLI 命令如下所示:
ninja -C <build_directory> [target...]