2017-06-20 121 views
0

我正在通过CMakeLists.txt传递预处理器指令,用于使用android NDK构建原生android库。使用Android Studio检查预处理器指令Gradle Build,NDK和CMake

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更详细的,这样我可以看到实际的编译器调用,并检查这些预处理指令都存在的一种手段?

+1

您可以使用-DCMAKE_VERBOSE_MAKEFILE = 1在我的答案在这里解释:https://stackoverflow.com/a/44709786/301166 – Bram

回答

1

答案是要理解Gradle利用CMake构建Android项目的android NDK组件(共享库),并且CMake利用Ninja作为构建系统来处理对编译器的调用。 android NDK使用的编译器现在默认为LLVM-> 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 NDK)你的android项目的一部分生成。

请注意,如果您已经通过Android软件包管理器安装了CMake,您可能会发现忍者没有安装在您的PATH上的位置。对我来说,忍者的二进制文件位于如下:

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

(同一目录CMake的二进制)

因此,我看到所有我的Android项目的调试armeabi-V7A构建我得铛编译器调用运行:

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