我正在传递预处理器指令,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 输出更详细,以便我可以看到实际的编译器调用并检查这些预处理器指令是否存在?
答案是理解Gradle利用CMake构建android项目的android NDK组件(共享库),而CMake利用Ninja作为构建系统来处理对编译器的调用。android NDK 使用的编译器现在默认为 LLVM->Clang。
因此,为了实际查看 Clang 调用,您必须找到build.ninja
android 项目的每个目标的文件。
就我而言,我只是为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
. 对我来说,忍者二进制文件的位置如下:
~/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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句