在conan中使用预构建二进制文件的几率越来越大



在我的M1 Mac mini上通过cmake使用conan包管理器,在那里,如果有--build=missing选项,conan通常可以下载并依赖预先构建的二进制文件,我很失望,在debian:sid上构建的docker容器上,启用了gcc工具链等标准编译工具,每个包都是从源代码构建的,因此需要非常长的时间才能完成。

如何确保或鼓励conan看到一个标准或通用的构建环境,从而最大限度地提高使用预构建包的机会?

感谢@Alan Birtles和@uilianries的评论,以下是对我有效的方法。

首先,一个人需要知道自己需要的最重的包裹。让我们以boost/1.80为例,它的库需要相当长的时间来构建。接下来,扫描可用二进制包的列表,例如boost/1.80.0:0c77626be2b1f8b44c0b5609c80dd9c16c06d6af,并读取其conan信息,其中包含规范

[settings]
arch=x86_64
build_type=Debug
compiler=clang
compiler.libcxx=libstdc++
compiler.version=12
os=Linux

这些是需要在SETTINGS规范中为conan_cmake_install()提供的设置,例如

conan_cmake_install(
BUILD missing
PATH_OR_REFERENCE ${CMAKE_SOURCE_DIR}
REMOTE conancenter
GENERATORS cmake
SETTINGS compiler=clang compiler.version=12 compiler.libcxx=libstdc++ cppstd=23
)

请注意,相对较新的编译器版本可能不支持所有感兴趣安装的包,因此选择保守的编译器版本通常是最佳选择。

当然,conan必须能够找到指定的编译器和兼容的c++标准库。如果将自己的编译环境容器化,并使用conan-io提供的docker基本映像(如conanio/clang12-ubuntu16.04:clang 12(,这将大大缓解。这些图像是JFrog ConanCenter实际构建二进制包所依据的,有助于conan避免从源代码阶段进行昂贵的构建。