【问题标题】:Conan: aggregate multiple packages to be used indepentendly柯南:聚合多个包独立使用
【发布时间】:2021-12-12 01:02:45
【问题描述】:

我目前正在使用柯南作为我的主要项目的“帮助工具”:我创建了一个 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。它不被其他任何东西使用。

【问题讨论】:

  • 是的,如果您通过导入/部署或手动将所有依赖项提取到不同的位置,则这些文件不再是 Conan 包。这不是部署(dll、可执行文件)的问题,或者如果您的构建系统知道消费者裸库。但是你错过了柯南提供给你的所有信息。我建议开发将包留在缓存中,并提取 exe 和共享库和数据以在柯南之外部署
  • @drodri 是的,我明白了。但是为了开发,我经常需要在新机器上构建软件。我不想再次安装柯南并设置我的所有软件包(我们没有遥控器。我只是使用柯南来构建档案)。我只是想找到一种方法来生成 cmake 配置文件部署后。现在我想起来了,这相当于在依赖项上调用cmake install &lt;build&gt;...也许这是一种可能性?
  • @drodri 这很令人沮丧,因为这似乎是用户的合理需求,我觉得我离让它工作如此接近,我觉得我只是错过了一点点洞察力。还;我每隔一段时间就严格使用柯南来建立档案。如果有必要,我不介意重新构建包。
  • 您是否正在寻找一种方法来共享已构建的依赖项,以便其他构建机器不必重新构建它们?
  • @John 是的!柯南似乎是一个非常好的工具,因为我希望能够指定特定的版本和选项。

标签: c++ cmake conan


【解决方案1】:

柯南的联合创始人詹姆斯在这里回答了这个问题:https://github.com/conan-io/conan/issues/9874

基本上:

  • 使用 CMakeDeps 生成器代替 cmake / cmake_find_package
  • 在安装时从主 conanfile.py 的 generate() 方法中修补生成的 cmake 配置文件
  • 相应地编辑食谱(但大多数时候应该没问题)

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多