Adding sub directory in cmake not working

时间:2017-04-09 23:48:49

标签: android c++ gradle cmake

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?

1 个答案:

答案 0 :(得分:0)

假设您从https://github.com/assimp获得了最新版本之一,并且跟随instructions(请注意,这是使用NDK r14测试的,可以从https://developer.android.com/ndk/downloads/older_releases下载),您已经制作了项目“Code”文件夹中的文件 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'
}