2016-10-13 3 views
0

CMakeを使ってTegra Nsight Visual Studioプロジェクトを生成するために、Androidのネイティブアクティビティアプリケーションを構築しようとしています。ネイティブアクティビティの場合、私はandroid_native_app_glue.c/.hを見つけなければなりません。これはAndroid NDK内の予測可能な場所にあります(sources/android/native_app_glue)。私のCMake Androidのtoolchainファイルは、CMake documentationに記載されているように、CMAKE_SYSTEM_NAMEとAPIバージョンのみを定義しています。Tegra NsightとAndroid NDKを見つける

しかし、Android NDKが実際にどこに配置されているかを定義するCMake変数はありません。 thisによれば、Androidスタジオでビルドする場合、ANDROID_NDK CMake変数が定義されていますが、コマンドラインからCMakeを呼び出す場合はそうではありません。

すべてのCMake変数をダンプしました。私のNDKの場所を含む唯一のものはCMAKE_CXX_COMPILERCMAKE_CXX_IMPLICIT_LINK_DIRECTORIESです。私はANDROID_NDKの位置を決定するためにこれらの1つを解析することができました - しかし、私はもっと簡単な方法がなければならないと思っていますか?

答えて

0

明らかに、実際にコンパイルするために使用されるNDKは、Visual Studioによって決定されます。これはVisual StudioのNsightプロパティで変更できます。したがって、CMake生成時に、実際のNDKを確実に決定することはできません。

しかし、CMakeソースを見て、それはコンパイルするNsight Tegraのバージョンを決定するためにレジストリを使用します。そこNsightでインストールNDKルートの場所を与えるレジストリキーHKLM\SOFTWARE\NVIDIA Corporation\Nsight Tegra\ndkRootを、存在し、これはandroid_native_app_glue.c/.hファイル検索にCMakeのに使用することができます。これらのファイルからではないかもしれないこと、

get_filename_component(ANDROID_NDK "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Nsight Tegra\\;ndkRoot]" ABSOLUTE) 
set(app_sources 
    "${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c" 
    "${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.h" 
...) 

ことが可能ですがVisual StudioのNsightプロパティでNDKルートがオーバーライドされている場合、NDKは実際にコンパイルに使用されましたが、これは妥当な解決策のようです。

関連する問題