【问题标题】:Checking preprocessor directives with Android Studio Gradle Build, NDK and CMake使用 Android Studio Gradle Build、NDK 和 CMake 检查预处理器指令
【发布时间】:2017-06-20 10:50:58
【问题描述】:

我正在通过CMakeLists.txt 传递预处理器指令,以使用 android NDK 构建本机 android 库。

add_definitions(-DMY_DIRECTIVE=1)

最好仔细检查这些预处理器指令是否真正找到了对编译器的调用(llvm?)

但 gradle 构建输出似乎不包括对编译器的调用,我只是得到:

Building C object CMakeFiles/my_project.dir/home/me/projects/my_proj/src/my_native.c.o

有没有办法让 gradle 输出更详细,以便我可以看到实际的编译器调用并检查那些预处理器指令是否存在?

【问题讨论】:

标签: android android-ndk cmake android-gradle-plugin


【解决方案1】:

答案是理解Gradle利用CMake构建android项目的android NDK组件(共享库),而CMake利用Ninja作为构建系统来处理对编译器的调用。 android NDK 使用的编译器现在默认为 LLVM->Clang。

因此,为了真正看到 Clang 调用,您必须为您的 android 项目的每个目标找到 build.ninja 文件。

就我而言,我只是为armeabi-v7a 目标架构构建。因此相关的build.ninja 文件位于:

/home/me/projects/my_proj/app/.externalNativeBuild/cmake/debug/armeabi-v7a
/home/me/projects/my_proj/app/.externalNativeBuild/cmake/release/armeabi-v7a

cd 到任一目录并运行:

ninja -v

即-v 选项是查看您的 android 项目的本机构建 (android NDK) 部分生成的对 clang 编译器的所有调用的关键。

请注意,如果您通过 android 包管理器安装了 CMake,您可能会发现 ninja 未安装在您的 PATH 上的位置。对我来说,ninja 二进制文件的位置如下:

~/Android/Sdk/cmake/3.6.3155560/bin/ninja

(与 cmake 二进制文件相同的目录)

因此,我必须运行我的 android 项目调试 armeabi-v7a 构建的所有 clang 编译器调用:

cd /home/me/projects/my_proj/app/.externalNativeBuild/cmake/debug/armeabi-v7a
~/Android/Sdk/cmake/3.6.3155560/bin/ninja -v

注意如果忍者告诉你ninja: no work to do.

然后运行:

~/Android/Sdk/cmake/3.6.3155560/bin/ninja clean

相关的忍者文档是-> https://ninja-build.org/manual.html#_extra_tools

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 2013-06-06
    • 1970-01-01
    • 2013-05-16
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多