Tegra Nsight并找到Android NDK

时间:2016-10-13 04:41:27

标签: c++ android-ndk cmake nsight

我正在尝试构建一个Android原生活动应用程序,使用CMake生成Tegra Nsight Visual Studio项目。对于本机活动,我必须找到android_native_app_glue.c/.h,它位于Android NDK中的可预测位置(sources / android / native_app_glue)。我的CMake Android工具链文件仅定义了CMAKE_SYSTEM_NAME和API版本,如CMake documentation中所述。

但是,我没有看到任何CMake变量定义了实际使用的Android NDK的位置。根据{{​​3}},在Android Studio中构建时,ANDROID_NDK CMake变量已定义,但从命令行调用CMake时并非如此。

我已经转储了所有CMake变量,唯一包含NDK位置的是CMAKE_CXX_COMPILERCMAKE_CXX_IMPLICIT_LINK_DIRECTORIES。我可以解析其中一个以确定ANDROID_NDK位置 - 但我认为必须有一个更直接的方式?

1 个答案:

答案 0 :(得分:0)

显然,用于实际编译的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,但这似乎是一个合理的解决方案。