使用CMake在Android Studio中向NDK应用程序添加静态预构建库和GLESv2支持

使用CMake在Android Studio中向NDK应用程序添加静态预构建库和GLESv2支持,android,android-studio,android-ndk,cmake,opengl-es-2.0,Android,Android Studio,Android Ndk,Cmake,Opengl Es 2.0,这是一个由两部分组成的问题。 我目前正在将当前的构建设置(Eclipse;ndk build)转换为(希望)更好的(androidstudio;cmake)。 我之所以选择cmake,是因为我读到,这是在不需要实验性gradle插件的情况下让调试正常工作的唯一方法(如果你确定这是错误的,请让我知道) 好的,我要讨论的第一个问题就是链接静态预构建库,比如我必须使用的boost的预构建版本。 我通过使用以下策略获得了一些成功: 将库添加为全局搜索的静态预构建库: add\u库(boost\u线程静态

这是一个由两部分组成的问题。 我目前正在将当前的构建设置(Eclipse;ndk build)转换为(希望)更好的(androidstudio;cmake)。 我之所以选择cmake,是因为我读到,这是在不需要实验性gradle插件的情况下让调试正常工作的唯一方法(如果你确定这是错误的,请让我知道)

好的,我要讨论的第一个问题就是链接静态预构建库,比如我必须使用的boost的预构建版本。 我通过使用以下策略获得了一些成功:

将库添加为全局搜索的静态预构建库:
add\u库(boost\u线程静态导入全局)

设置预构建库的位置:
设置\u目标\u属性(导入的boost\u线程属性\u位置boost/lib/libboost\u线程\u pthread-gcc-mt-s-1\u 55.a)

链接库时使用预构建库的存储值:
target\u link\u库(myprog${boost\u thread}…)

当我说我已经取得了一些成功时,我的意思是我看到一些错误消失了,但其他错误仍然存在(尽管它不再抱怨找不到要链接的库)。我漏了一步吗

第二个问题是我无法添加我看到的也是由NDK提供的GLESv2库。我似乎也找不到一个单一的来源来说明如何正确地做到这一点。我尝试过使用
find_包
find_库
,但没有成功。 我在Android.mk中只有
LOCAL\u LDLIBS:=-lGLESv2
,所以我尝试了
set(CMAKE\u CXX\u STANDARD\u LIBRARIES${CMAKE\u CXX\u STANDARD\u LIBRARIES}-lGLESv2)
,但这也不起作用(给我
/bin/sh:-lGLESv2:找不到命令


第一个问题应该是非常普遍的,但似乎很少有文档说明应该如何解决。第二个问题可能不太常见,但可能仍然很常见,以至于我惊讶地发现如何设置它几乎没有帮助。

我仍然存在构建问题,但就问题中提出的问题而言,我认为我有不错的解决方案:

要包括预构建的静态库:
添加库(boost\u regex静态导入)

set_target_properties(boost_regex properties导入_LOCATION/full/path/to/libboost_regex.a)#我使用${CMAKE_CURRENT_SOURCE_DIR}来确定完整路径

目标链接库(myproject…boost\u regex…

这似乎很有效

至于GLES2问题,我使用了我在问题评论中的内容:
#GLESv2
查找路径(GLES2\u包括目录GLES2/gl2.h)
提示${ANDROID\u NDK})
查找库(GLES2_库libGLESv2.so
提示${GLES2\u INCLUDE\u DIR}/./lib)
目标目录(myproject PUBLIC${GLES2\u include\u DIR})

目标链接库(myproject…${GLES2\u LIBRARY}…

您可以发布链接boost\u线程时仍然看到的错误吗?对于第二个问题,删除'-l'(cmake将自动添加此项),而不是更改
cmake_CXX_标准_库
,并使用
target_link_库
。我通过告诉cmake在android ndk中的何处查找GLE:
GLESv2 find_path,成功地停止了gl错误(GLES2_INCLUDE_DIR GLES2/gl2.h hits${ANDROID_NDK})find_library(GLES2_libGLESv2.so hits${GLES2_INCLUDE_DIR}/./lib)target_INCLUDE_目录(myproject PUBLIC${GLES2_INCLUDE_DIR})target_链接库(myproject…${GLES2_library})
,但我不确定这是最简单/最好的方法