2017-06-20 123 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