#c #android-ndk #cmake #nsight
#c #android-ndk #cmake #nsight
Вопрос:
Я пытаюсь создать собственное приложение activity для Android, используя CMake для создания проекта Tegra Nsight Visual Studio. Для собственной активности я должен найти android_native_app_glue.c/.h
, которая находится в предсказуемом месте в NDK Android (sources / android / native_app_glue). Мой файл набора инструментов CMake для Android определяет только версии CMAKE_SYSTEM_NAME
и API, как описано в документации CMake.
Однако я не вижу никаких переменных CMake, которые определяют, где на самом деле находится используемый Android NDK. В соответствии с этим при сборке в Android Studio ANDROID_NDK
определяется переменная CMake, но это не так при вызове CMake из командной строки.
Я сбросил все переменные CMake, и единственное, что содержит местоположение моего NDK, — это CMAKE_CXX_COMPILER
and CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES
. Я мог бы проанализировать один из них, чтобы определить ANDROID_NDK
местоположение, но я думаю, что должен быть более простой способ?
Ответ №1:
По-видимому, NDK, используемый для фактической компиляции, определяется Visual Studio. Вы можете изменить это в свойствах Visual Studio Nsight. Таким образом, во время генерации CMake фактический NDK не может быть надежно определен.
Однако, просматривая исходные тексты CMake, он использует реестр для определения версии Nsight Tegra для компиляции. Существует раздел реестра HKLMSOFTWARENVIDIA CorporationNsight TegrandkRoot
, который указывает местоположение корневого каталога NDK, установленного с помощью Nsight, и его можно использовать в CMake для поиска android_native_app_glue.c/.h
файлов:
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"
...)
Возможно, что эти файлы могут быть не из NDK, фактически используемого для компиляции, если корень NDK переопределен в свойствах Visual Studio Nsight, но это кажется разумным решением.