前两天讲了如何使用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中试了都是无效的。
查看这些文件,还是为了更好的理解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#