【问题标题】:Android JNI/C++/CMake: how to add and build interdependent C++ libraries?Android JNI/C++/CMake:如何添加和构建相互依赖的 C++ 库?
【发布时间】:2021-09-13 13:33:08
【问题描述】:

我是 JNI/CMake 的新手。我创建了一个空的 Java/C++/JNI 项目。然后我在 3 个不同的文件夹中添加了 3 个库(= .h 和 .cpp 文件)。这是我的项目文件夹的结构:

-cpp (with lib-native.cpp and CMakeLists.txt inside)
--lib1usedbylib3 (with .h/.cpp files inside + CMakeLists.txt)
--lib2usedbylib3 (with .h/.cpp files inside + CMakeLists.txt)
--lib3thatneedslib1and2 (with .h/.cpp files inside + CMakeLists.txt)

现在我需要在 3 个 CMakeLists 文件中编写代码,但我没有设法做一些工作......我不想使用 GLOB,因为 CMake 似乎不推荐它,我想列出每个库的所有文件。我想在一个名为 native-lib(基于 lib-native.cpp 构建)的单个库中编译 3 个库

如果有人能告诉我在我的 3 个 CMakeLists 文件中要写什么,我将不胜感激。

非常感谢您的帮助!

【问题讨论】:

  • Google 有很多 NDK samples on github,所有/大部分都使用 CMake。您可能想查看这些,然后在 CMake 文档中查找您在其中找到的命令。
  • @Michael 谢谢。大多数示例中提到的“android”和“log”库是什么?例如这里:github.com/android/ndk-samples/blob/main/native-codec/app/src/… 什么是 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -UNDEBUG") 或 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wno-unused -功能”) ?谢谢。
  • libloglibandroid 实现了 the native Android APIs 的一部分。 set 设置一个 CMake 变量,在这两种特殊情况下,它用于添加一些 C 和 C++ 编译器标志。

标签: android c++ cmake android-ndk java-native-interface


【解决方案1】:

我会在顶层目录中编写一个 CMakeLists.txt 文件并包含这样的子目录:

set(DIRS
    cpp
    lib1usedbylib3
    lib2usedbylib3
    lib3thatneedslib1and2
)

foreach(LIBRARY ${DIRS})
        message("==> CMake generation for ${LIBRARY}...")
        add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/${LIBRARY})
endforeach()

然后在每个目录下,创建一个库,最后在主CMakeLists中处理构建库,按照你的意愿进行链接和混合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2015-11-22
    • 2016-01-16
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多