c++ - 柯南:聚合多个包以独立使用
问题描述
我目前正在使用柯南作为我的主要项目的“帮助工具”:我创建了一个 conanfile.py,它构建了我所有的依赖项并将它们导入到当前文件夹中。最终的目标是将此文件夹归档并重新分发到我们的多台机器上,然后告诉 CMake 一切都在其中。
然而,这里有个问题:我希望这个档案不依赖于柯南。我们的 CMakeLists.txt 正在使用 Find_Package(),我真的希望它能够以非侵入性方式工作。到目前为止,我已经设法让一些工作,但是,我的主要问题是 CMake 集成。
以下是我想要创建存档的方式:
mkdir build
conan install <path to my conanfile> -if build
tar cf archive.tar build
到目前为止,我已经成功地将所有依赖项正确复制到正确的目录中(build/bin 包含所有二进制文件,build/include 所有包含等等)
我现在唯一的问题是使用 CMake。我尝试使用 cmake_paths 和 cmake_find_package 生成器,但它们都指向我机器上的柯南缓存。
然后我尝试了部署生成器,这似乎非常接近我想要实现的目标。但是,我无法弄清楚如何从我刚刚部署到的目录中生成 cmake 文件。
我找到了 generate() 方法,但我没有取得太大的成功。
我需要在外部实施吗?喜欢修补由 cmake 生成器创建的文件?还是有更清洁的方法?
谢谢
编辑:只是想澄清一下:除了简单地构建我的依赖项之外,我不想将柯南用于其他任何事情。它安装在我们的主服务器上,该服务器托管将构建二进制文件的 gitlab CI/CD。它不被其他任何东西使用。
解决方案
柯南的联合创始人詹姆斯在这里回答了这个问题:https ://github.com/conan-io/conan/issues/9874
基本上:
- 使用 CMakeDeps 生成器代替 cmake / cmake_find_package
- 在安装时从主 conanfile.py 的 generate() 方法中修补生成的 cmake 配置文件
- 相应地编辑食谱(但大多数时候应该没问题)
推荐阅读
- javascript - 单击按钮复制单元格列逗号分隔
- linux - arm32 交叉编译在正确的汇编代码中给出编译错误
- mysql - 部署mysql不采用秘密设置的root密码
- python - 子进程和 Python 我做错了什么?
- c# - 将带有命名空间的 XML 转换为 C# 模型类
- python - 如何使用 moto,@mock_dynamodb2 模拟失败的操作?
- django - 强制 Django 将模型字段值识别为模板标签值?
- c++ - 提升二进制反序列化
- vue.js - 如何使 Vue.js 3 中动态生成的按钮不执行相同的功能
- sqlalchemy - FastAPI / SQLAlchemy 创建多个用户