在 cmake 中添加子目录不起作用

Adding sub directory in cmake not working

本文关键字:子目录 不起作用 添加 cmake      更新时间:2023-10-16

我正在尝试添加另一个具有CMakeLists.txt文件的cmake项目作为编译依赖项,我可以在另一个.cpp文件中使用它。

我想添加的项目位置:用户/脑残/下载/assimp-master/

主项目位置:/Users/brainfreak/AndroidStudioProjects/ModelShow/app/src/main/cpp/hellojni.cpp

这在 Android Studio 项目中用作本机代码。我按照 https://developer.android.com/studio/projects/add-native-code.html#create-cmake-script"包括其他 CMake 项目"下的教程进行操作

这是我想出的主要CMakeLists.txt:/Users/brainfreak/AndroidStudioProjects/ModelShow/app/src/main/cpp/CMakeLists.txt

cmake_minimum_required( VERSION 2.6 )
add_library(model-lib SHARED hellojni.cpp)
set (src_dir Users/brainfreak/Downloads/assimp-master/)
set (output_dir Users/brainfreak/Downloads/assimp-master/output)
file(MAKE_DIRECTORY ${output_dir})
add_subdirectory(${src_dir} ${output_dir})
add_library(assimp STATIC IMPORTED)
set_target_properties( assimp PROPERTIES IMPORTED_LOCATION
                       ${output_dir}/${ANDROID_ABI}/assimp)
include_directories(${src_dir}/include)
target_link_libraries(model-lib assimp)

我总是得到的错误:

Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
  Error while executing process /Users/brainfreak/Android/sdk/cmake/3.6.3155560/bin/cmake with arguments {--build /Users/brainfreak/AndroidStudioProjects/ModelShow/app/.externalNativeBuild/cmake/debug/x86 --target model-lib}
  ninja: error: 'Users/brainfreak/Downloads/assimp-master/output/x86/assimp', needed by '/Users/brainfreak/AndroidStudioProjects/ModelShow/app/build/intermediates/cmake/debug/obj/x86/libmodel-lib.so', missing and no known rule to make it

我不知道在"${output_dir}/${ANDROID_ABI}/"下放置什么文件以供脚本查找。你能说出我哪里出错了吗?

假设您从 https://github.com/assimp 获得了最新版本之一并按照说明进行操作(请注意,这是使用 NDK r14 测试的,可从 https://developer.android.com/ndk/downloads/older_releases 下载(,那么您已经在项目"代码"文件夹中生成了文件 libassimp.so。请确保生成库的 x86 版本。

将此文件复制到 /Users/brainfreak/Downloads/assimp-master/output/x86/ ,并准备 CMakeLists.txt

cmake_minimum_required( VERSION 2.6 )
add_library(model-lib SHARED hellojni.cpp)
set (src_dir /Users/brainfreak/Downloads/assimp-master/)
set (output_dir /Users/brainfreak/Downloads/assimp-master/output)
file(MAKE_DIRECTORY ${output_dir})
add_subdirectory(${src_dir} ${output_dir})
add_library(assimp STATIC IMPORTED)
set_target_properties( assimp PROPERTIES IMPORTED_LOCATION
                       ${output_dir}/${ANDROID_ABI}/libassimp.so)
include_directories(${src_dir}/include)
target_link_libraries(model-lib assimp)

请注意,脚本缺少斜杠 ( / ( 的文件之前Users这可能会导致混淆。

不要忘记在你的app/build.gradle中设置abiFilters:

ndk {
  // Specifies the ABI configurations of your native
  // libraries Gradle should build and package with your APK.
  abiFilters 'x86'
}