C++ 我的预置不包含二进制文件或包含

C++ 我的预置不包含二进制文件或包含,c++,boost,android-ndk,C++,Boost,Android Ndk,prefate成功运行,但生成的prefate目录中只有CMake文件,没有其他资源。我的目标是与同事轻松共享二进制资产,并将它们包含在我的Android构建中。我做错了什么 我正在尝试创建一个boost的预置(尽管谷歌可能会制作一个)。我曾经构建boost 1.73.0,将相关的include和库复制到一个汇编目录中,用prefable.json、module.json和abi.json文件填充它,然后运行 prefab --output "/home/developer/works

prefate
成功运行,但生成的prefate目录中只有CMake文件,没有其他资源。我的目标是与同事轻松共享二进制资产,并将它们包含在我的Android构建中。我做错了什么

我正在尝试创建一个boost的预置(尽管谷歌可能会制作一个)。我曾经构建boost 1.73.0,将相关的include和库复制到一个汇编目录中,用
prefable.json
module.json
abi.json
文件填充它,然后运行

prefab --output "/home/developer/workspace/boost-prefab/out/boost/x86_64" \
  --build-system cmake        \
  --platform     android      \
  --abi          "x86_64"     \
  --os-version   "21"         \
  --ndk-version  "21"         \
  --stl          "c++_static" \
  "/home/developer/workspace/boost-prefab/assembly/boost"
但是结果目录每个abi只包含两个CMake文件

 $ find x86_64 -type f
 x86_64/lib/x86_64-linux-android/cmake/boost/boostConfig.cmake
 x86_64/lib/x86_64-linux-android/cmake/boost/boostConfigVersion.cmake
我创建的程序集目录如下所示(我遵循以下命令):

prefable.json

{"schema_version": 1, "name": "boost", "version": "1.73.0", "dependencies": []}
{"library_name": "libboost_filesystem"}
{"abi": "x86_64", "api": 21, "ndk": "21", "stl": "c++_static"}
modules/filesystem/module.json

{"schema_version": 1, "name": "boost", "version": "1.73.0", "dependencies": []}
{"library_name": "libboost_filesystem"}
{"abi": "x86_64", "api": 21, "ndk": "21", "stl": "c++_static"}
modules/filesystem/libs/android.x86_64/abi.json

{"schema_version": 1, "name": "boost", "version": "1.73.0", "dependencies": []}
{"library_name": "libboost_filesystem"}
{"abi": "x86_64", "api": 21, "ndk": "21", "stl": "c++_static"}

我承认我对prefab的
操作系统版本感到困惑,从我所能知道的来看,它只是NDK版本(因为它不是API版本或Android主要版本号),但我认为这不是问题所在

我还试图通过vcpkg生成一个boost预置,但是boost现在不会在vcpkg中构建(有一些PRs可以解决这个问题,但我无法构建它)。在任何情况下,显示了一个稍微不同的布局,其中AAR插入到预置中

我的目标是建立一个boost的预构建档案,让我的同事很容易将其导入到他们的Android项目中

  • 我只是误解了预制文件的用途吗
  • 即使与默认的boost文件相比,生成的CMake文件看起来也很原始,也就是说,我更喜欢boost CMake文件,而不是在这里创建的预制文件
  • 我是否应该首先尝试为boost创建AAR
最终,我能够在Android项目中使用Boost的唯一方法是将它的构建包含在我的
CMAKE\u FIND\u ROOT\u路径中,但如果归结到这一点,Prefable的优势是什么?我觉得我还不如就这样

我只是误解了预制文件的用途吗

根据你的下一个问题,只有一点点。它是一个以与构建系统无关的方式分发预构建库的系统。除了“构建系统不可知论”之外,这与您正在尝试做的事情是一致的

即使与默认的boost文件相比,生成的CMake文件看起来也很原始,也就是说,我更喜欢boost CMake文件,而不是在这里创建的预制文件

Prefable设计用于支持任意构建系统,而无需软件包作者关心如何单独支持每个系统。这对Android来说很重要,因为虽然有很多人使用CMake,但ndk build也是官方支持的选项,其他几十种构建系统也经常使用

boost自己的CMake文件将提供哪些功能,您缺少哪些功能?如果我们可以以构建系统不可知的方式执行某项功能,则可以在提交功能请求

如果不能以构建系统不可知的方式来描述它,那么prefable就不是一个好的选择。vcpkg可能是更好的选择

我是否应该首先尝试为boost创建AAR

这是使用AGP预制包的最简单方法,是的。vcpkg通常是获得现有语料库的最简单途径,但正如您所指出的,您需要向他们发送补丁(或错误报告)以首先修复他们的构建

或者,这就是我们如何构建当前发布的少量内容。应该很容易签出,添加您自己的端口文件,并构建您的AAR。如果您向我们发送补丁,我可能会在测试基础设施启动并运行后将其合并(目前我们无法支持许多软件包,因为测试是手动的)

最终,我能够在我的Android项目中使用Boost的唯一方法是将它的构建包含在我的CMAKE_FIND_ROOT_路径中,但如果归结到这一点,预制的优势是什么


如果你使用AAR,你不需要这样做。如果您这样做,AGP将为您处理细节。预期用例是用于构建集成预制件的系统,而不是用户必须完成的工作。AGP已经做到了这一点,但仅当从AAR消费时。

“因为它不是API版本”是的。你凭什么说不是?应该是你的
minSdkVersion
。嗨,丹,我真的很感谢你的回复。因为我写了这篇文章,虽然我不得不将重点完全转移到平台上,所以现在我没有用NDK支持任何开发人员,而是在写宋楚瑜文件,并与SE政策作斗争