Android 7 构建系统中的 CMake 使用 Ninja 做什么?

What's CMake doing with Ninja in Android 7 build system?

根据我得到的信息,在 Android 7 构建系统中:

而且我还在 help page 中发现 CMake 包含一个 Ninja 生成器。

编辑:

CMake 包含在 platform/prebuilts, but not included in the Android 7 manifests

但我又检查了android代码,有很多CMakeLists.txt和CMake在/external下的一些脚本中被调用。

    ./external/clang/CMakeLists.txt:686:  get_cmake_property(variableNames VARIABLES)
    ./external/clang/CMakeLists.txt:711:    ${cmake_3_1_EXCLUDE_FROM_ALL}
    ./external/clang/CMakeLists.txt:725:    ${cmake_3_4_USES_TERMINAL_OPTIONS}
    ./external/clang/CMakeLists.txt:734:    ${cmake_3_4_USES_TERMINAL}
    ./external/clang/CMakeLists.txt:750:      ${cmake_3_4_USES_TERMINAL}
    ./external/clang/runtime/CMakeLists.txt:28:    set(cmake_3_4_USES_TERMINAL_OPTIONS
    ./external/clang/runtime/CMakeLists.txt:49:  get_cmake_property(variableNames VARIABLES)
    ./external/clang/runtime/CMakeLists.txt:78:    ${cmake_3_4_USES_TERMINAL_OPTIONS}
    ./external/dbus/cmake/cross-compile.sh
    ./external/compiler-rt/lib/tsan/check_cmake.sh
    ./external/opencv3/platforms/scripts/cmake_android_mips.sh
    ./external/opencv3/platforms/scripts/cmake_arm_gnueabi_softfp.sh
    ./external/opencv3/platforms/scripts/cmake_carma.sh
    ./external/opencv3/platforms/scripts/cmake_android_x86.sh
    ./external/opencv3/platforms/scripts/cmake_android_arm.sh
    ./external/opencv3/platforms/scripts/cmake_arm_gnueabi_hardfp.sh
    ./external/opencv3/platforms/scripts/cmake_android_service.sh
    ./external/opencv3/samples/android/hello-android/cmake_android.sh

此外,CMake 存在于文件夹下

    butter@server131:~/code/AOSP/N$ find ./ -name "cmake"
    ./prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/lib/cmake
    ./prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/lib32/cmake
    ./external/dbus/cmake
    ./external/llvm/cmake
    ./external/compiler-rt/cmake
    ./external/deqp/framework/delibs/cmake
    ./external/eigen/cmake
    ./external/eigen/bench/btl/cmake
    ./external/ceres-solver/cmake
    ./external/google-benchmark/cmake
    ./external/libcxx/cmake
    ./external/libcxxabi/cmake
    ./external/opencv3/platforms/ios/cmake
    ./external/opencv3/cmake
    ./external/clang/cmake
    ./external/google-breakpad/src/testing/gtest/cmake
    ./external/libunwind_llvm/cmake
    ./external/pcre/dist/cmake

那么,如果 Soong 可以生成 .ninja 文件,那么 CMake 在 Android 7 构建系统中的作用是什么?只是另一种选择还是还没有完全被宋代取代?

Starting in 2.2, Android Studio on 64 bit OS, supports building C/C++ via CMake and ndk-build through stable gradle.

In both cases, Gradle is configured to point at the external build system. It interrogates the external build system to determine a list of all C/C++ sources that are being built in the project and uses this list to populate the Studio project, enabling editing and debugging inside Studio while still using the external build system to compile and link the C/C++ sources.

There is a set of maintained CMake NDK samples here.

参考:http://tools.android.com/tech-docs/external-c-builds

参见:Build Android NDK project with Cmake