Tegra Nsight 和定位 Android NDK
Tegra Nsight and locating the Android NDK
我正在尝试构建一个 Android 本机 activity 应用程序,使用 CMake 生成一个 Tegra Nsight Visual Studio 项目。对于本机 activity,我必须找到 android_native_app_glue.c/.h
,它位于 Android NDK (sources/android/native_app_glue) 中的可预测位置。我的 CMake Android 工具链文件仅定义 CMAKE_SYSTEM_NAME
和 API 版本,如 CMake documentation.
中所述
但是,我没有看到任何定义正在使用的 Android NDK 的实际位置的 CMake 变量。根据 this,在 Android Studio 中构建时,定义了 ANDROID_NDK
CMake 变量,但从命令行调用 CMake 时并非如此。
我已经转储了所有 CMake 变量,唯一包含我的 NDK 位置的是 CMAKE_CXX_COMPILER
和 CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES
。我可以解析其中一个以确定 ANDROID_NDK
位置 - 但我认为必须有更直接的方法?
显然用于实际编译的NDK由Visual Studio决定。您可以在 Visual Studio Nsight 属性中更改它。因此,在 CMake 生成时,无法可靠地确定实际的 NDK。
但是,通过查看 CMake 源代码,它使用注册表来确定要编译的 Nsight Tegra 版本。存在一个注册表项 HKLM\SOFTWARE\NVIDIA Corporation\Nsight Tegra\ndkRoot
,它给出了随 Nsight 安装的 NDK 根目录的位置,这可以在 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"
...)
如果在 Visual Studio Nsight 属性中覆盖 NDK 根,这些文件可能不是来自实际用于编译的 NDK,但这似乎是一个合理的解决方案。
我正在尝试构建一个 Android 本机 activity 应用程序,使用 CMake 生成一个 Tegra Nsight Visual Studio 项目。对于本机 activity,我必须找到 android_native_app_glue.c/.h
,它位于 Android NDK (sources/android/native_app_glue) 中的可预测位置。我的 CMake Android 工具链文件仅定义 CMAKE_SYSTEM_NAME
和 API 版本,如 CMake documentation.
但是,我没有看到任何定义正在使用的 Android NDK 的实际位置的 CMake 变量。根据 this,在 Android Studio 中构建时,定义了 ANDROID_NDK
CMake 变量,但从命令行调用 CMake 时并非如此。
我已经转储了所有 CMake 变量,唯一包含我的 NDK 位置的是 CMAKE_CXX_COMPILER
和 CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES
。我可以解析其中一个以确定 ANDROID_NDK
位置 - 但我认为必须有更直接的方法?
显然用于实际编译的NDK由Visual Studio决定。您可以在 Visual Studio Nsight 属性中更改它。因此,在 CMake 生成时,无法可靠地确定实际的 NDK。
但是,通过查看 CMake 源代码,它使用注册表来确定要编译的 Nsight Tegra 版本。存在一个注册表项 HKLM\SOFTWARE\NVIDIA Corporation\Nsight Tegra\ndkRoot
,它给出了随 Nsight 安装的 NDK 根目录的位置,这可以在 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"
...)
如果在 Visual Studio Nsight 属性中覆盖 NDK 根,这些文件可能不是来自实际用于编译的 NDK,但这似乎是一个合理的解决方案。