Android Gradle无法使用对象库构建CMake项目,因为它需要一个输出文件

Android Gradle无法使用对象库构建CMake项目,因为它需要一个输出文件,android,gradle,cmake,Android,Gradle,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定义了多个目标,但问题在于: s

我的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})
对象目标不会生成
。因此
文件
可以在其他目标中使用

问题是(据我所知),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 >任务:应用程序:externalNativeBuildDebug失败 失败:生成失败,出现异常。 *出了什么问题: 任务“:app:externalNativeBuildDebug”的执行失败。 >目标smcxx_obj的预期输出文件位于/home/cytrinox/src/androidapp/app/.cxx/cmake/debug/armeabi-v7a/smcxx_obj,但没有输出文件 目标文件lib.cc.o已成功编译并存在。但是没有smcxx_obj文件夹,也没有smcxx_obj.so文件(这是预期的)

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

根据:

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

但是,CMake对象库似乎根本不受支持,并导致您遇到的问题。我实际上认为这是一个bug:Gradle应该跳过构建它们,因为它们只在CMake本身中有用

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


得到完全相同的问题。除了从CMakeLists.txt中删除对象库目标之外,您是否找到了修复方法?@Ivano.Bilenchi我已将对象库作为cmake中的目标删除,并直接使用其他库(静态+共享)中的对象文件,而不是对象库目标。但这并不是对最初问题的修复。你的评论提醒我,我实际上找到了一个不错的修复方法。我添加了它作为答案。似乎更好,因为不需要修改cmake文件。我不想一开始就相信它属于“defaultConfig”下。事实证明我错了:如果“target1”依赖于
对象
库,则此解决方案不起作用。“target1”仍然可以是共享库或可执行文件。
android {
  ...
  defaultConfig {
    ...
    externalNativeBuild {
      ...
      cmake {
        targets "target1", "target2"
      }
    }
  }