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政策作斗争