Gradle无法使用OBJECT库构建CMake项目,因为它需要输出文件

我的 build.gradle 文件包含使用CMake构建项目的文件:

   externalNativeBuild {
    cmake {
        // Provides a relative path to your CMake build script.
        version "3.13.0+"
        path "../subproj/smcxx/CMakeLists.txt"
    }
}

CMakeList.txt 定义了多个目标,但是有问题的是:

set(SOURCES "src/lib.cc")
add_library(smcxx_obj OBJECT ${SOURCES})

目标目标不会构建.so.a文件,而.o文件可用于其他目标。

问题是(据我了解),Gradle分析了CMake目标并期望每个目标都有一个输出文件。当我使用 gradlew 编译整个项目时,出现以下错误消息:

> Task :app:externalNativeBuildDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:externalNativeBuildDebug'.
> Expected output file at /home/cytrinox/src/androidapp/app/.cxx/cmake/debug/armeabi-v7a/smcxx_obj for target smcxx_obj but there was none

目标文件 lib.cc.o 已成功编译并存在。但是没有 smcxx_obj 文件夹,也没有 smcxx_obj.so 文件(这是预期的)。

是否可以解决此错误,例如,告诉Gradle对特定的CMake目标跳过此检查?

la_zhanghui 回答:Gradle无法使用OBJECT库构建CMake项目,因为它需要输出文件

根据documentation

Gradle会构建您在CMake(或ndk-build)项目中定义的所有可执行文件和共享库。

但是,似乎根本不支持CMake对象库,这会导致您遇到问题。我实际上相信这是一个错误:Gradle应该跳过构建它们的步骤,因为它们仅在CMake本身中才有用。

无论如何,您可以通过手动指定要Gradle构建的CMake目标来解决此问题(例如,只需省略对象库目标,就可以了):

android {
  ...
  defaultConfig {
    ...
    externalNativeBuild {
      ...
      cmake {
        targets "target1" "target2"
      }
    }
  }
本文链接:https://www.f2er.com/3152359.html

大家都在问