【问题标题】:How to Include other CMake projects in Android Studio如何在 Android Studio 中包含其他 CMake 项目
【发布时间】:2021-11-03 03:28:07
【问题描述】:

最近,我一直在用 Android studio 开发一个原生 c++ 项目,它需要一些其他的外部开源库。我想通过使用 CMake 的 add_subdirectory 命令将这些库(例如,hello 库)包含在 Android Studio 项目中,以简化我的代码管理。我参考了https://developer.android.com/studio/projects/configure-cmake 的在线指南文档,但并不完全。具体来说,我将以下项目添加到我的顶级 CMakeList.txt:

set( lib_src_DIR /Users/dependencies/hello-1.1.1 )
set( lib_build_DIR /Users/dependencies/hello )
file(MAKE_DIRECTORY ${lib_build_DIR})
add_subdirectory( ${lib_src_DIR} ${lib_build_DIR} )

整个顶级 CMakeLists.txt 发布如下图:

一切都搞定了,我建了这个项目,我希望看到的是/Users/dependencies/hello目录下的libhello.a,但是只有一些Cmake相关的文件,如下:

在 hello 目录及其子目录中没有找到其他的 libhello.a,看来我的 hello 库根本没有编译。下图是我的hello项目的CMakeList.txt: 我确定这个hello项目可以编译,因为我试过用cmake命令直接编译,没问题。

那么,为什么顶级 CMakeLists.txt 中的 add_subdirectory 不起作用?我错过了其他一些设置吗?顺便说一句,这个顶级 CMakeLists.txt 是在我创建原生 C++ 项目时由 Android Studio 自动生成的,我只是在其中添加了一些内容。

【问题讨论】:

  • 这些外部依赖库需要单独编译吗?
  • Stack Overflow 不鼓励使用带有文本(代码、错误消息等)的图像。请用它本身替换代码图像。另见How to Ask
  • 在哪里实际使用(链接)hello 静态库?
  • 嗯,这不是重点。你好只是为了我的测试,我还没有链接它。但即便如此,它仍然应该被生成。但是对于 STATIC,它不会被编译。使用 SHARED 时,它可以生成 libhello.so 。很久以前有帖子讨论过这个问题,我在网站上找到它并说服自己是Android Studio的问题。

标签: android-studio cmake native-code


【解决方案1】:

好吧,原来是Android Studio的bug,它只能生成synamic library(.so),如果你指定库为static,就编译不了了。

【讨论】:

    猜你喜欢
    • 2020-05-25
    • 1970-01-01
    • 2010-11-29
    • 2017-08-21
    • 2019-11-05
    • 2011-01-04
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多