【发布时间】:2018-04-12 01:28:43
【问题描述】:
我正在尝试将现有的本机库用作 android 项目的一部分。我按照有关将 C 和 C++ 代码添加到 android studio 项目的说明进行操作。我已经到了我有一个正常工作的 CMakeLists.txt 文件(独立测试)的地步,我已经指示 gradle 使用它来编译本机代码。
我使用的库使用 make,所以我使用 ExternalProject_Add 来指示 cmake 如何编译它。以下是相关代码:
ExternalProject_Add(foo
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../libfoo
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../libfoo/configure
--host=arm-linux-androideabi
BUILD_COMMAND ${MAKE}
INSTALL_COMMAND true)
这是模块的 build.gradle 的相关部分:
externalNativeBuild {
cmake {
path '../cpp/CMakeLists.txt'
}
}
当我运行./gradlew assembleDebug 时,外部项目没有被编译。在 cmake 中添加依赖于foo 的可执行文件(名为bar)后,配置步骤运行但构建步骤不运行。我修改了库的代码,所以编译会失败,但 gradle 无论如何都会返回成功)。
这是./gradlew assembleDebug 在这些更改之后输出的最后几行。
configure: creating ./config.status
config.status: creating Makefile
config.status: executing depfiles commands
[6/10] Performing build step for 'foo'
[7/10] Performing install step for 'foo'
[8/10] Completed 'foo'
[9/10] Building C object CMakeFiles/bar.dir/bar.c.o
[10/10] Linking C executable bar
BUILD SUCCESSFUL in 18s
任何想法发生了什么?我做错了什么?
我正在使用 gradle 4.1 和 cmake 3.6。
【问题讨论】:
-
您可以将
LOG_BUILD ON添加到您的 ExternalProject_Add 吗?您是否也将构建的结果包装在导入的目标中以在bar中使用它?