微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

处理 conan 和 CMake 之间编译器版本的版本不匹配

如何解决处理 conan 和 CMake 之间编译器版本的版本不匹配

我正在 macOS 上进行开发,Apple-clang v12 作为认编译器通过 Xcode 安装。由于 valgrind 仍然不支持 Big Sur 并且 Apple 版本不支持 Google Sanitizers,因此我必须通过自制软件手动安装 llvm v11.1 以利用 Google Sanitizers 启用任何内存泄漏检测工具。

不幸的是,这会导致 conan 及其与 CMake 和 CLion(我的 IDE)的集成出现一些问题。由于我的依赖项没有使用 clang 而不是 Apple-clang 为我的架构提供二进制文件,因此它们必须在本地构建。不幸的是,使用两个相互矛盾的错误消息调用 conan 和 CMake 时出错:

conan install /Users/near/Code/personal/blight -if=/Users/near/Code/personal/blight/cmake-build-debug -pr=LLVM11Debug --build=missing
Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Debug
compiler=clang
compiler.libcxx=libstdc++
compiler.version=11
os=Macos
os_build=Macos
[options]
[build_requires]
[env]

fmt/7.1.3: WARN: Package binary is corrupted,removing: 2284170e72f485ebb586c7bd784f294475c25e5e
conanfile.txt: Installing package
Requirements
    fmt/7.1.3 from 'conan-center' - Cache
    spdlog/1.8.5 from 'conan-center' - Cache
Packages
    fmt/7.1.3:2284170e72f485ebb586c7bd784f294475c25e5e - Build
    spdlog/1.8.5:b744aef5cdad24eec65bb267843e16ad74c9ad39 - Build

Installing (downloading,building) binaries...
fmt/7.1.3: WARN: Build folder is dirty,removing it: /Users/near/.conan/data/fmt/7.1.3/_/_/build/2284170e72f485ebb586c7bd784f294475c25e5e
fmt/7.1.3: copying sources to build folder
fmt/7.1.3: Building your package in /Users/near/.conan/data/fmt/7.1.3/_/_/build/2284170e72f485ebb586c7bd784f294475c25e5e
fmt/7.1.3: Generator cmake created conanbuildinfo.cmake
fmt/7.1.3: Calling build()
-- The C compiler identification is AppleClang 12.0.0.12000032
-- The CXX compiler identification is AppleClang 12.0.0.12000032
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Conan: called by CMake conan helper
-- Conan: called inside local cache
-- Conan: Adjusting output directories
-- Conan: Using cmake global configuration
-- Conan: Adjusting default RPATHs Conan policies
-- Conan: Adjusting language standard
-- Conan: Adjusting fPIC flag (ON)
-- Conan: Compiler Clang>=8,checking major version 11
-- Conan: Checking correct version: 12
CMake Error at conanbuildinfo.cmake:402 (message):
  Detected a mismatch for the compiler version between your conan profile
  settings and CMake:

  Compiler version specified in your conan profile: 11

  Compiler version detected in CMake: 12.0

  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.
Call Stack (most recent call first):
  conanbuildinfo.cmake:499 (conan_error_compiler_version)
  conanbuildinfo.cmake:589 (check_compiler_version)
  conanbuildinfo.cmake:141 (conan_check_compiler)
  CMakeLists.txt:5 (conan_basic_setup)


-- Configuring incomplete,errors occurred!
See also "/Users/near/.conan/data/fmt/7.1.3/_/_/build/2284170e72f485ebb586c7bd784f294475c25e5e/build_subfolder/CMakeFiles/CMakeOutput.log".
See also "/Users/near/.conan/data/fmt/7.1.3/_/_/build/2284170e72f485ebb586c7bd784f294475c25e5e/build_subfolder/CMakeFiles/CMakeError.log".
fmt/7.1.3: 
fmt/7.1.3: ERROR: Package '2284170e72f485ebb586c7bd784f294475c25e5e' build Failed
fmt/7.1.3: WARN: Build folder /Users/near/.conan/data/fmt/7.1.3/_/_/build/2284170e72f485ebb586c7bd784f294475c25e5e
ERROR: fmt/7.1.3: Error in build() method,line 63
    cmake = self._configure_cmake()
while calling '_configure_cmake',line 56
    self._cmake.configure(build_folder=self._build_subfolder)
    ConanException: Error 1 while executing cd '/Users/near/.conan/data/fmt/7.1.3/_/_/build/2284170e72f485ebb586c7bd784f294475c25e5e/build_subfolder' && cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_OSX_ARCHITECTURES="x86_64" -DCMAKE_OSX_SYSROOT="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk" -DCONAN_IN_LOCAL_CACHE="ON" -DCONAN_COMPILER="clang" -DCONAN_COMPILER_VERSION="11" -DCONAN_CXX_FLAGS="-m64" -DCONAN_SHARED_LINKER_FLAGS="-m64" -DCONAN_C_FLAGS="-m64" -DCONAN_LIBCXX="libstdc++" -DBUILD_SHARED_LIBS="OFF" -DCMAKE_INSTALL_PREFIX="/Users/near/.conan/data/fmt/7.1.3/_/_/package/2284170e72f485ebb586c7bd784f294475c25e5e" -DCMAKE_INSTALL_BINDIR="bin" -DCMAKE_INSTALL_SBINDIR="bin" -DCMAKE_INSTALL_LIBEXECDIR="bin" -DCMAKE_INSTALL_LIBDIR="lib" -DCMAKE_INSTALL_INCLUDEDIR="include" -DCMAKE_INSTALL_OLDINCLUDEDIR="include" -DCMAKE_INSTALL_DATaroOTDIR="share" -DCONAN_CMAKE_POSITION_INDEPENDENT_CODE="ON" -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY="ON" -DCONAN_EXPORTED="1" -DFMT_DOC="False" -DFMT_TEST="False" -DFMT_INSTALL="True" -DFMT_LIB_DIR="lib" -Wno-dev '/Users/near/.conan/data/fmt/7.1.3/_/_/build/2284170e72f485ebb586c7bd784f294475c25e5e'
"/Users/near/Library/Application Support/JetBrains/ToolBox/apps/CLion/ch-0/203.7717.62/CLion.app/Contents/bin/cmake/mac/bin/cmake" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=clang++ -G "CodeBlocks - Unix Makefiles" /Users/near/Code/personal/blight
-- The CXX compiler identification is Clang 11.1.0
-- Check for working CXX compiler: /usr/local/opt/llvm/bin/clang++
-- Check for working CXX compiler: /usr/local/opt/llvm/bin/clang++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Conan: Adjusting output directories
-- Conan: Using cmake global configuration
-- Conan: Adjusting default RPATHs Conan policies
-- Conan: Adjusting language standard
-- Current conanbuildinfo.cmake directory: /Users/near/Code/personal/blight/cmake-build-debug
CMake Error at cmake-build-debug/conanbuildinfo.cmake:626 (message):
  Detected a mismatch for the compiler version between your conan profile
  settings and CMake:

  Compiler version specified in your conan profile: 12.0

  Compiler version detected in CMake: 11.1

  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.
Call Stack (most recent call first):
  cmake-build-debug/conanbuildinfo.cmake:728 (conan_error_compiler_version)
  cmake-build-debug/conanbuildinfo.cmake:813 (check_compiler_version)
  cmake-build-debug/conanbuildinfo.cmake:365 (conan_check_compiler)
  CMakeLists.txt:13 (conan_basic_setup)


-- Configuring incomplete,errors occurred!
See also "/Users/near/Code/personal/blight/cmake-build-debug/CMakeFiles/CMakeOutput.log".

这是在 CLion 的 CMake 输出窗口中看到的输出。第一次调用让 CMake 认为 Apple-clang 是我的编译器,而 conan 配置为使用 llvm 版本,第二步(最有可能由我的 conan_basic_setup 中的 CMakeLists.txt 调用)选择了正确的 CMake 编译器但柯南最终没有个人资料,因此版本不匹配。

在 CLion 设置中,我已经用 llvm v11.1 编译器覆盖了 c++ 编译器:

Toolchain settings

正确配置两者以使用 llvm v11.1 编译器的正确解决方案是什么?我个人不想启用 CONAN_disABLE_CHECK_COMPILER CMake 变量,因为不清楚最终将使用哪个编译器来编译依赖项。

以前发布的问题仅建议有意使用更高版本,这不是我想要的:

解决方法

我在您的日志文件中看到的两个包 spdlog 和 fmt 都可用作仅标头配置。 因此,如果这些是您唯一的依赖项,您可以简单地将选项设置为仅使用它们的标头,这将消除问题,因为无需为这些包构建任何内容。

这样做的一种方法是将设置添加到您使用的配置文件中,添加到选项部分,就像这样

[options]
fmt:header_only=True
spdlog:header_only=True
,

尽管首先禁用了 Conan 集成,但我还是找到了解决方案。有了一个干净的构建目录,我就进去了,不得不手动调用柯南,如下所示:

CC=clang CXX=clang++ conan install .. -pr=LLVM11Debug --build=missing

之后就可以在 CLion 的 UI 中配置 CMake 和 clang 11 来运行构建。问题是 Conan 集成插件没有提供使用环境变量设置编译器的直接方法,也没有从 CLion 的工具链选项中获取编译器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。