如何使用cmake使ExternalProject_Add像ADD_SUBDIRECTORY命令一样?

时间:2018-03-02 07:59:20

标签: c++ android-studio cmake android-ndk

我在Android Studio下创建了一个本机库,我正在伤害以下问题。

在我的AndroidStudio项目CMakeLists.txt中,我有这个:

cmake_minimum_required(VERSION 3.7.0)    

add_library(native-lib
             SHARED
             src/main/cpp/native-lib.cpp )    

IF(USE_EXTERNAL)
    include(ExternalProject)
    ExternalProject_Add(
        project_mylib
        DOWNLOAD_COMMAND ""
        SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/mylib/"
        CMAKE_ARGS
            -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}
    )
    add_dependencies(native-lib project_mylib)
ELSE()
    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/main/cpp/mylib/)
ENDIF()    

find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )   


target_link_libraries(native-lib
    ${log-lib}    
    mylib
)

自制图书馆位于src/main/cpp/mylib/CMakeLists.txt

cmake_minimum_required(VERSION 3.7.0)
project(lib)    
add_library(mylib SHARED lib.cpp)
INSTALL(TARGETS mylib
    RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
    LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
)

当我使用"传统" add_subdirectory(...)一切顺利。但是,如果我使用ExternalProject_Add(...)版本,链接器将跳过已编译的libmylib.so库,因此无法将mylib链接到native-lib

我收到以下消息:skipping incompatible /home/.../app/.externalNativeBuild/cmake/debug/arm64-v8a/lib/libmylib.so when searching for -lmylib

我的猜测是,当CMakeLists.txt编译导致不兼容的共享库时,AndroidStudio为根ExternalProject设置的所有标志都没有设置。

所以,我想知道是否有一种方法来编译一个cmake ExternalProject,就像它是根项目的一部分(共享相同的编译标志等)?

感谢您的任何建议

0 个答案:

没有答案