在cmake中添加子目录不起作用 [英] Adding sub directory in cmake not working

查看:635
本文介绍了在cmake中添加子目录不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图添加另一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆