专栏首页along的开发之旅Android Studio如何查看JNI生成中的 preprocessor/assemble file
原创

Android Studio如何查看JNI生成中的 preprocessor/assemble file

前两天讲了如何使用CMake+make,查看生成的预处理和汇编文件。

但是Android Studio中很尴尬的是CMake+ninja,是没法使用上述方法查看预处理和汇编的。那么久这样束手无策么?

相信强大的gcc/clang,相信stackoverflow,不懈查找后,发现gcc/clang有个参数叫`-save-temps=

`, 意如其名,保存临时文件,而预处理和汇编都是生成object的中间临时文件。

当你使用CMake时,需要设置CMAKE_C_FLAGS和CMAKE_CXX_FLAGS。

CMake_C_FLAGS对C文件生效。

set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -save-temps=obj")

-save-temps 生成位置和makefile同目录

-save-temps=obj 和生成的和.o文件同目录,更方便查看

CMAKE_CXX_FLAGS对Cpp文件生效,只设置上述的C_FLAGS是无法让cpp文件生成中间文件的。

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -save-temps=obj")

CMake+ninja这样就搞定,那么远古时代的ndk-build可以生成中间文件么?当然也是可以的,`-save-temps`是gcc/clang的一个编译选项,和make/ninja是无关的。

在ndk-build上:

在Android.mk中的LOCAL_CFLAGS加入标记,ndk-build中LOCAL_CFLAGS是对C/CPP同时生效的,所以cpp不用在特意加。

LOCAL_CFLAGS := -save-temps=obj 生成位置和.o同目录

hello-jni/app/build/intermediates/ndkBuild/debug/obj/local/arm64-v8a/objs-debug/hello-jni/hello-jni.i

LOCAL_CFLAGS := -save-temps 生成位置和build.gradle一样,在hello-jni/app/hello-jni.i

最后回归下XCode:

XCode本身就带,只是觉得不是很好用

在Product/Perform Action中,就有预处理和汇编文件。不过必须在.cpp中才有用, 在.h/.hpp中试了都是无效的。

Preprocess/Assemble

查看这些文件,还是为了更好的理解cpp,共勉

参考:

https://gcc.gnu.org/onlinedocs/gcc-3.4.0/gcc/Overall-Options.html#Overall%20Options

https://gcc.gnu.org/onlinedocs/gcc-3.4.0/gcc/Debugging-Options.html#Debugging%20Options

https://clang.llvm.org/docs/CommandGuide/clang.html

https://gcc.gnu.org/onlinedocs/gcc-3.4.0/gcc/Option-Summary.html#Option%20Summary

https://clang.llvm.org/docs/index.html#

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android Studio开发之 JNI 篇的简单示例

    Android上层应用使用java开发,不过java并不适合密集型运算,比如图片处理等,遇到密集型运算,一般使用c/c++完成。

    砸漏
  • xmake-gradle 首发, 集成xmake快速构建Android JNI程序

    目前在 gradle 中做 android jni 相关集成开发,有两种方式,通过 ndkBuild 或者 CMake 来支持,gradle 也内置了这两工具的...

    ruki
  • Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结

    都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统。跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持...

    俺踏月色而来
  • Android程序中,内嵌ELF可执行文件--Android开发C语言混合编程总结

    都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统。跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持...

    俺踏月色而来
  • Android NDK and OpenCV development with Android Studio

    Android NDK and OpenCV development with Android Studio

    宅男潇涧
  • Android Studio中使用jni进行opencv开发的环境配置方法

    使用jni进行opencv开发可以快速地将PC端的opencv代码移植到手机上,但是如何在android studio下进行配置,网上几乎找不到教程,大多都是e...

    砸漏
  • Android Studio2.2下NDK开发初试

    forrestlin
  • Android Studio 3.6 发布啦,快来围观

    Android Studio 3.6 稳定版终于来了,此版本的 Android Studio 包括对一些设计工具的更新,包括布局编辑器和资源管理器。

    GSYTech
  • Android的JNI【实战教程】5⃣️---Android Studio 2.2 以上 NDK开发

    今天介绍一下Android Studio 2.2 下 NDK开发 ,那叫一个顺溜—-纵享丝滑! 虽然现在AS 2.2 之后,jni开发配置相当方便,但是还是...

    先知先觉

扫码关注云+社区

领取腾讯云代金券