conan install --build 由于版本不匹配而失败,即使更改了默认值

问题描述

我正在使用 conan 来处理依赖项,并且我已经能够通过运行 sourcebuild 等各个步骤来编译和运行项目。

然而,我希望能够在一个步骤中安装和构建,为此我这样做:

conan install . -if build -s build_type=Debug --build

在这种情况下,我得到了一些包:

Compiler version specified in your conan profile: 10.3

  Compiler version detected in CMake: 9.3

  Please check your conan profile settings (conan profile show
  [default|your_profile_name])

  P.S.  You may set CONAN_disABLE_CHECK_COMPILER CMake variable in order to
  disable this check.

现在我可以更改配置文件设置以匹配请求的编译器设置,但是其他不同的包开始抱怨编译器版本不匹配。即一些软件包需要版本 9.3,其他版本 10.3,其他版本 9...

考虑到如果我单独运行构建步骤,包依赖项已经与我的可执行文件链接,我不确定为什么我会得到这个 catch 22 行为。

我在评论中尝试了一个建议,将其添加到我的 conanfile.py

def configure(self):
        # gcc compiler version
        defs = {}
        if self.settings.compiler == "gcc":
            defs["CMAKE_C_COMPILER"] = f"gcc-{self.settings.compiler.version}"
            defs["CMAKE_CXX_COMPILER"] = f"g++-{self.settings.compiler.version}"

        # configure cmake
        cmake = CMake(self)
        cmake.configure(defs = defs)

        return super().configure()

我得到一个例外。

解决方法

如果您不告诉 CMake 您要使用的编译器,它会尝试在 project(...) 调用中发现它。如果它们不匹配,Conan 宏执行的检查将失败。

通常,如果您想使用与默认版本不同的编译器版本,则需要通知 CMake。使用柯南配置文件执行此操作的最常见方法之一是将 CCCXX 变量添加到配置文件本身。

[settings]
...
compiler=gcc
compiler.version=10.3
...


[env]
CC=/usr/bin/gcc-10
CXX=/usr/bin/g++-10

Conan 会在调用构建系统之前将这些变量添加到环境中,并且大多数(CMake、Autotools 等)都会将它们考虑在内。

这样,您无需修改​​ conanfile.py 文件