2017-04-16 7 views
8

私はGradleとCMakeを使って、コマンドラインからAndroid NDKプロジェクトをコンパイルしています。以前はAntとndk-buildを使用していましたが、プロジェクトをGradleとCMakeに完全に移行しようとしています。私build.gradleGradleとAndroid NDKを使ってCMakeを冗長モードに強制します。

私はCMakeのを起動するには、次の行を持っている:

externalNativeBuild { 
    cmake { 
     path "src/main/cpp/CMakeLists.txt" 
    } 
} 

は今どのように私はそれがそれらを作る前に、コンソールにすべてのコンパイラの呼び出しを印刷するCMakeのを強制することができますか?具体的には、私はCMakeがどのようにコンパイラとリンカを実行するのかを見たいと思っています。

私はすでに次のことを試してみた

、無駄にすべて:

1)私のCMakeLists.txtで、私は次の行に入れている:

set(CMAKE_VERBOSE_MAKEFILE on) 

は何の効果も持っていませんでした。

./gradlew build --info 

のGradleは、いくつかのものを印刷しますが、何のコンパイラの呼び出し:

2)私はこのようなビルドを開始していません。

3)そして、このように:

./gradlew build --debug 

のGradleはものがたくさん、ないコンパイラの呼び出しを印刷。

これら3つの試みはどれも私が望んだことはありませんでしたが、CMakeが個々のソースファイルでどのように動いているかを私はどのように知ることができますか?

+1

プロジェクトルートの '.externalNativeBuild'ディレクトリを確認してください。あなたに関連するすべての情報を含んでいる可能性があります。 –

+1

本当に、ありがとう!すべての必須情報を含む 'build.ninja'ログファイルがあります。あなたが答えとしてあなたのコメントを投稿したいなら、私はそれを受け入れるでしょう。 – Andreas

+0

アップデートもご覧ください:私は最終的に私のデスクトップに到達し、手動でフラグをテストしました。 –

答えて

10

gradleは、cmakeまたはndk-buildを使用してNDK統合を持つモジュールごとに、ルートディレクトリをルートの下に作成します。

CMakeの場合、gradleプラグインはかなり冗長です。ビルドバリアントごとに、別々のサブディレクトリが作成されます。 .externalNativeBuild/cmake/debug/x86または.externalNativeBuild/cmake/release/armeabiなど

各ディレクトリには、いくつかの有用なファイルが含まれています。cmake_build_command.txtはCMakeのに渡された実際のパラメータについて説明します。 android_gradle_build.jsonは、あなたのバイナリ用に派生したgradleプラグインのパラメータを示します。 build.ninjaから、各コンパイルまたはリンケージステップでこれらのパラメータがどのように適用されたかを推測できます。

ndk-buildについては、android_gradle_build.jsonファイルも非常に便利です。 ndkBuild_build_command.txtには、ndk-buildコマンドに渡されるすべてのパラメータがリストされ、ndkBuild_build_output.txtは、そのコマンドの出力されていない出力です。引数には、V=1を簡単に追加できます。

externalNativeBuild { 
    cmake { 
    cppFlags "-std=c++11" 
    arguments "-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON" 
    abiFilters "armeabi" 
    } 
} 

CMAKE_VERBOSE_MAKEFILEがなければ、Gradleのコンソールが表示されます:

externalNativeBuild { 
    ndkBuild { 
    cppFlags "-std=c++11" 
    arguments "APP_STL=gnustl_static", "NDK_TOOLCHAIN_VERSION=4.9", "APP_OPTIM=release", "NDK_DEBUG=0", "V=1" 
    abiFilters "armeabi" 
    } 
} 

CMakeについては、関連する引数は"-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON"は(explanation and alternativesを参照)である"-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON"

:app:externalNativeBuildDebug 
Build native-lib armeabi 
[1/2] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o 
[2/2] Linking CXX shared library ../../../../build/intermediates/cmake/debug/obj/armeabi/libnative-lib.so 

、私はトンを取得します出力:

(あなたはそれ自体CMakeの構成 に問題がある場合を除き)
:app:externalNativeBuildDebug 
Build native-lib armeabi 

[1/2] /Users/alex/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv5te-none-linux-androideabi --gcc-toolchain=/Users/alex/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64 --sysroot=/Users/alex/Library/Android/sdk/ndk-bundle/platforms/android-14/arch-arm -Dnative_lib_EXPORTS -isystem /Users/alex/Library/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /Users/alex/Library/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include -isystem /Users/alex/Library/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fno-limit-debug-info -O0 -fno-limit-debug-info -fPIC -MD -MT CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o -MF CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o.d -o CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o -c /Users/alex/test/egl/app/src/main/cpp/native-lib.cpp 
[2/2] : && /Users/alex/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv5te-none-linux-androideabi --gcc-toolchain=/Users/alex/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64 --sysroot=/Users/alex/Library/Android/sdk/ndk-bundle/platforms/android-14/arch-arm -fPIC -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fno-limit-debug-info -O0 -fno-limit-debug-info -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative-lib.so -o ../../../../build/intermediates/cmake/debug/obj/armeabi/libnative-lib.so CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o -llog -lEGL -lGLESv2 -lm "/Users/alex/Library/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/libgnustl_static.a" "-latomic" && : 

明白ファイル.externalNativeBuild/cmake/debug/armeabi/cmake_build_output.txtには興味深い情報が含まれていません。 Gradleはこの出力をファイルに書きませんが、コマンドラインリダイレクトを使用できます。Where are Gradle logs?を参照してください。

+0

私にエラーが表示されます: 'com.android.build.gradle.internal.dsl.CmakeOptions'型のオブジェクトの引数のメソッド引数()を見つけることができませんでした – peetonn

+1

@peetonn:あなたが間違っているのは、** externalNativeBuild ** ** path **をCMakeLists.txtにブロックします。しかし**引数**はもう一つのブロックに入るはずです。これは内部です** android.defaultConfig ** –

+3

PS android.buildの全く異なるエンティティに同じ名前を付けるというアイデアは想像もできません。 gradle DSL –

関連する問題