簡體   English   中英

Gradle 無法使用 OBJECT 庫構建 CMake 項目,因為它需要一個 Z78E6221F6393D1356688 文件文件1DBCEDZF8

[英]Gradle fails to build a CMake project with OBJECT libraries because it expects a output file

我的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})

OBJECT目標不會構建.so.a文件,相反, .o文件可用於其他目標。

問題是(據我了解)Gradle 分析 CMake 目標並期望每個目標都有一個 output 文件。 當我使用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

object 文件lib.cc.o編譯成功並存在。 但是沒有smcxx_obj文件夾,也沒有smcxx_obj.so文件(這是預期的)。

是否可以解決此錯誤,例如通過告訴 Gradle 跳過對特定 CMake 目標的檢查?

根據文檔

Gradle 構建您在 CMake(或 ndk-build)項目中定義的所有可執行文件和共享 object 庫。

但是,似乎根本不支持 CMake object 庫,並導致您遇到問題。 我實際上認為這是一個錯誤:Gradle 應該跳過構建它們,因為它們大多只在 CMake 本身中有用。

無論如何,您可以通過手動指定您希望 Gradle 構建的 CMake 目標來解決此問題(例如,只需省略 object 庫目標就可以了):

android {
  ...
  defaultConfig {
    ...
    externalNativeBuild {
      ...
      cmake {
        targets "target1", "target2"
      }
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM