在我的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
避免从源代码阶段进行昂贵的构建。