在Android NDK项目中从命令行运行CMake

时间:2017-06-21 09:42:53

标签: android android-ndk cmake

如何独立于Android项目的其余部分运行NDK Cmake构建,理想情况是从Android Studio外部的命令行运行?

相当于从jni目录运行ndk-build,用于较旧的Android NDK项目。

我需要准确调查对编译器的调用是什么样的,在Android Studio中构建整个项目时似乎无法获取此信息

我的第一次尝试只是从包含project/app的{​​{1}}目录运行cmake,但这告诉我CMakeLists.txt未安装 - 那么Android Studio如何管理它呢? ?

3 个答案:

答案 0 :(得分:10)

如果您的目标是从命令行运行(而不是尝试完全 gradle正在做什么),那么只需按照通常的方式使用cmake:

$ cmake -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI=whatever $YOUR_SOURCE_DIR

或者,您可以从命令行运行./gradlew

答案 1 :(得分:5)

您最初的问题是,在使用Android Studio构建时无法看到命令行调用。

您可以通过编辑app / build.gradle文件获取编译器的命令行参数。

defaultConfig {
    ...
    externalNativeBuild {
        cmake {
            ...
            arguments "-DCMAKE_VERBOSE_MAKEFILE=1", ...
        }
    }

}

在Adroid Studio的Gradle Console窗格中,您将看到编译器和链接器的命令行,如下所示:

[1/176] / home / bram / android-sdk-linux / ndk-bundle / toolchains / llvm / prebuilt / linux-x86_64 / bin / clang --target = armv7-none-linux-androideabi --gcc -toolchain = / home / bram / android-sdk-linux / ndk-bundle / toolchains / arm-linux-androideabi-4.9 / prebuilt / linux-x86_64 --sysroot = / home / bram / android-sdk-linux / ndk- bundle / sysroot -isystem / home / bram / android-sdk-linux / ndk-bundle / sysroot / usr / include / arm-linux-androideabi -D__ANDROID_API __ = 19 -g -DANDROID -ffunction-sections -funwind-tables -fstack- protector-strong -no-canonical-prefixes -march = armv7-a -mfloat-abi = softfp -mfpu = vfpv3-d16 -fno-integrated-as -marm -mfpu = neon -Wa, - noexecstack -Wformat -Werror = format-security -Os -DNDEBUG -fPIC -MD -MT /home/bram/src/GPGOAP/CMakeFiles/gpgoap.dir/astar.co -MF /home/bram/src/GPGOAP/CMakeFiles/gpgoap.dir/astar。 cod -o /home/bram/src/GPGOAP/CMakeFiles/gpgoap.dir/astar.co -c /home/bram/src/GPGOAP/astar.c

答案 2 :(得分:2)

有关接受的答案的详细信息:

传递给CMake的完整参数集将写入:

<project-root>/<module-root>/.externalNativeBuild/cmake/<build-type>/<ABI>/cmake_build_command.txt`

有关详细信息,请参见:https://developer.android.com/ndk/guides/cmake.html#build-command