2016-10-13 16 views
0

CMake를 사용하여 Tegra Nsight Visual Studio 프로젝트를 생성하는 Android 기본 활동 응용 프로그램을 빌드하려고합니다. 네이티브 활동의 경우 Android NDK (sources/android/native_app_glue)에서 예측 가능한 위치에있는 android_native_app_glue.c/.h을 찾아야합니다. 내 CMake Android 툴체인 파일은 CMake documentation에 설명 된대로 CMAKE_SYSTEM_NAME 및 API 버전 만 정의합니다.Tegra Nsight 및 Android NDK 위치 확인

그러나 사용중인 Android NDK가 실제로 어디에 있는지를 정의하는 CMake 변수가 없습니다. this에 따르면 Android Studio에서 빌드 할 때 ANDROID_NDK CMake 변수가 정의되어 있지만 명령 행에서 CMake를 호출 할 때는 그렇지 않습니다.

모든 CMake 변수를 덤프하고 내 NDK 위치가 포함 된 유일한 것은 CMAKE_CXX_COMPILERCMAKE_CXX_IMPLICIT_LINK_DIRECTORIES입니다. 나는이 중 하나를 구문 분석하여 ANDROID_NDK 위치를 결정할 수 있습니다. 그러나 더 간단한 방법이 있어야한다고 생각합니까?

답변

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가 실제로 컴파일하는 데 사용되지만 이는 합리적인 솔루션처럼 보입니다.