c++ - 即使在更改默认值后,conan install --build 由于版本不匹配而失败
问题描述
我正在使用 conan 来处理依赖项,并且我已经能够通过运行单独的步骤(如source
和build
.
但是,我希望能够一步安装和构建,为此我这样做:
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(...)
如果它们不匹配,则由柯南宏执行的检查将失败。
通常,如果您想使用不同于默认的编译器版本,您需要通知 CMake。使用柯南配置文件的最常见方法之一是将CC
和CXX
变量添加到配置文件本身。
[settings]
...
compiler=gcc
compiler.version=10.3
...
[env]
CC=/usr/bin/gcc-10
CXX=/usr/bin/g++-10
Conan 将在调用构建系统之前将这些变量添加到环境中,并且其中大多数(CMake、Autotools...)将考虑它们。
这样,您无需修改conanfile.py
文件。
推荐阅读
- amazon-web-services - 如何使 apigateway 转发根路径到集成的 http 端点?
- asp.net-mvc - IIS 与 IIS Express 会话处理和多用户
- mysql - 分隔符问题
- list - 根据另一个列表从列表中删除和添加 Ints
- java - 哪种方法更适合使用 Docker 和 Jenkins 构建 Java 代码?
- python - 如何使用保存的模型来恢复谷歌 colab 中的训练?
- asp.net-core - Angular 11 本地化 (i18n) 发布问题
- c++ - 构建 C++ GRPC 时出错
- javascript - 如何将二进制数据编码为任意文本表示?
- python - 如何在 Safari 浏览器中使用 Selenium 进行测试?