首页 > 解决方案 > 即使在更改默认值后,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()

我得到一个例外。

标签: c++linuxpackagedependenciesconan

解决方案


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

通常,如果您想使用不同于默认的编译器版本,您需要通知 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​​文件


推荐阅读