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

2020-12-06 10:53:56 浏览数 (1)

前两天讲了如何使用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/AssemblePreprocess/Assemble

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

参考:

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

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

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

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

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

0 人点赞