【发布时间】:2022-07-15 06:43:00
【问题描述】:
我正在尝试使用 CMake 设置一个类似于 hello-world 的项目并集成 Android NDK。我找到了很有前途的文档,尤其是关于 CMake 的内置 Android NDK 支持的文档。
但是,我面临一些问题。
首先,
find_library()
没有找到任何东西。我正在打电话
find_library(mediandk-lib mediandk)
来查找mediandk 并将其保存到
mediandk-lib
,但是在打印变量的内容时它只报告
mediandk-lib-NOTFOUND
。
其次,在包含路径方面的最佳做法是什么?我知道
find_library()
不完全是
find_package()
。我不太确定这些差异,但如果我没记错的话,它不会自动设置包含路径。那么我是否必须手动执行此操作,指向安装 NDK 的正确文件夹,或者如何很好地完成?
这是我的
CMakeLists.txt
的样子:
cmake_minimum_required(VERSION 3.23)
project(playground)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 21)
set(CMAKE_ANDROID_NDK $ENV{ANDROID_NDK_HOME})
#export ANDROID_NDK_HOME=/Users/john/Library/Android/sdk/ndk/21.1.6352462
set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION "clang")
set(CMAKE_ANDROID_STL_TYPE "c++_static")
set(CMAKE_ANDROID_ARCH_ABI "arm64-v8a")
add_executable(playground
src/main.cpp
)
target_link_libraries(playground
mediandk #I should instead use find_library and link against mediandk-lib
)
这是我的
main.cpp
:
#include
#include
auto main() -> int
{
std::cout << "playground\n";
auto* codec = AMediaCodec_createDecoderByType("audio/mpeg");
AMediaCodec_delete(codec);
std::cout << "done\n";
return 0;
}
是的:
- 如何使 find_library() 正常工作?
- 如何处理包含目录?
- 进行此设置的最佳做法或黄金标准是什么?