2016-10-20 5 views
6

私はcmakeベースのビルドスクリプトでクロスプラットフォームのライブラリを持っています。 Android用のcmakeのサポートが今から利用可能になっているので(https://developer.android.com/studio/projects/add-native-code.html)、ndk-buildメイクファイルをごみ箱に移動する予定です。
私はfind_package(ZLIB REQUIRED) をテストしました。zlibヘッダーとライブラリ自体はNDKのsysroot内のすべてのABIで使用できるため、正常に動作しています。 だから、私は味ごとにcmakeのCMDLINEにカスタム引数を追加したり、タイプを構築することができます。ABIごとにcmake引数をgradleで設定することはできますか?

buildTypes { 
    release { 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     externalNativeBuild { 
      cmake { 
       arguments "-DMYLIB_ENABLE_PROGUARD=ON" 
      } 
     } 
    } 
    debug { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     externalNativeBuild { 
      cmake { 
       arguments "-DMYLIB_ENABLE_PROGUARD=OFF" 
      } 
     } 
    } 
} 

私の問題はFindPackageを介して外部の静的/共有ライブラリを見つけるために、ABIあたりCMAKE_PREFIX_PATHを設定する機能です。

一般的に、私はcmakeのスクリプト自体に${ANDROID_ABI}と一緒にfind_libraryinclude_directoriesを使用することができますが、私はすでに、複数のプラットフォームのサポートとスクリプトの作業持っているきれいな方法があるので、私は、汚いコードを追加するwan'tはありません(find_package + CMAKE_PREFIX_PATH)。

ありがとうございました!

答えて

5

これは現在サポートしているものではありません。私はそれが可能でなければならないと思う。私はそれを追跡するためにb.android.com/225884を開いた。

+0

はどうもありがとうございました! – vollmond

+0

問題追跡ツールには、全体的な回避策が記載されています。しかし、回避策は何ですか? –

+0

私はそれがそれぞれのabiのために異なった設定をすることだったと思います。例えば、debugx86 {ndk {abiFilters "x86"}}など、ABIごとに1つ –

1

あなただけのABIの後にある場合は、

if(${ANDROID_ABI} STREQUAL "x86_64") 
    # ABI xx 
endif() 

これは非常にうまく機能し、ハックのように感じていないようなことを行うことができます。私は、OpenSSL(ここでは完全な使用:https://github.com/schwabe/ics-openvpn/blob/master/main/src/main/cpp/openssl.cmake)の構築のためにそれを使用するあなたが本当に味が必要な場合は

を...私は味のため、この超醜いハックを思い付いた:

cmake 
# Super hacky way to determine if flavour is normal 
# cmake is called with the DCMAKE_LIBRARY_OUTPUT_DIRECTORY that includes the flavour (and archtecture) 
#-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/arne/software/icsopenvpn/main/build/intermediates/cmake/normal/debug/obj/arm64-v8a 
if (${CMAKE_LIBRARY_OUTPUT_DIRECTORY} MATCHES "build/intermediates/cmake/.*normal.*/") 
    # Flavour specific 
endif() 
関連する問題