在cmake中添加子目录不起作用 [英] Adding sub directory in cmake not working
问题描述
我试图添加另一个CMakeLists.txt文件作为编译依赖项的cmake项目,我可以在另一个.cpp文件中使用。
项目位置我想添加的内容:Users / brainfreak / Downloads / assimp-master /
主项目位置:/ Users / brainfreak / AndroidStudioProjects / ModelShow / app / src / main /cpp/hellojni.cpp
这用作Android Studio项目中的本机代码。我遵循 https://开发者中的教程包含其他CMake项目下的.android.com / studio / projects / add-native-code.html#create-cmake-script
$ b
这是我想出了主要的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用户/ 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_director ies($ {src_dir} / include)
target_link_libraries(model-lib assimp)
我总是得到这个错误:
任务':app:externalNativeBuildDebug'的执行失败。
>构建命令失败。
执行进程时的错误/Users/brainfreak/Android/sdk/cmake/3.6.3155560/bin/cmake带参数{--build /Users/brainfreak/AndroidStudioProjects/ModelShow/app/.externalNativeBuild/cmake/debug/ x86 /目标模型lib)
ninja:错误:'Users / brainfreak / Downloads / assimp-master / output / x86 / assimp','/ Users / brainfreak / AndroidStudioProjects / ModelShow / app / build /中间体/ cmake / debug / obj / x86 / libmodel-lib.so',丢失并且没有已知的规则使其成为
我不知道在$ {output_dir} / $ {ANDROID_ABI} /下放置了哪个文件供脚本查找。你能告诉我哪里出错了吗? 解决方案
假设你从 https://github.com/assimp 并按照 https://developer.android.com/ndk/downloads/older_releases ),您已经制作了 libassimp .so 项目内的代码文件夹。确保您构建了该库的 x86 版本。
将此文件复制到 / Users / brainfreak / Downloads / assimp-master / output / x86 /
,并准备好 CMakeLists.txt : $ b
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 之前缺少斜线的文件(
/
code>这可能会导致混淆。
不要忘记设置 abiFilters 在您的 app / build.gradle 中:
ndk {
//指定您的原生
库的ABI配置Gradle应该使用APK进行构建和打包。
abiFilters'x86'
}
I'm trying to add another cmake project which has CMakeLists.txt file as a compilation dependency which i can use in another .cpp file.
Location of project which i want to add: Users/brainfreak/Downloads/assimp-master/
Location of main project: /Users/brainfreak/AndroidStudioProjects/ModelShow/app/src/main/cpp/hellojni.cpp
This is used as a native code in a Android Studio project. I followed the tutorial in https://developer.android.com/studio/projects/add-native-code.html#create-cmake-script under "Include other CMake projects"
This is the main CMakeLists.txt that i came up with: /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)
The error i always get:
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
I don't know what file to place under "${output_dir}/${ANDROID_ABI}/" for the script to find. Can you tell where i'm going wrong?
Assuming that you got one of the latest releases from https://github.com/assimp and followed the instructions (note that this was tested with NDK r14, available for download from https://developer.android.com/ndk/downloads/older_releases), you have produced file libassimp.so inside project "Code" folder. Make sure that you build the x86 version of the library.
Copy this file to /Users/brainfreak/Downloads/assimp-master/output/x86/
, and prepare your 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)
Note that the file that your script was missing slash (/
) before Users
which could cause the confusion.
Don't forget to set abiFilters in your app/build.gradle:
ndk {
// Specifies the ABI configurations of your native
// libraries Gradle should build and package with your APK.
abiFilters 'x86'
}
这篇关于在cmake中添加子目录不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!