我将尝试首先描述我的设置:
cmake/3.18.2
套餐gcc
软件包:package_info
PATH
CC
CXX
def package(self):
autotools = AutoToolsBuildEnvironment(self)
autotools.make(target='install-strip')
def package_info(self):
bin_folder = os.path.join(self.package_folder, 'bin')
self.env_info.path.append(bin_folder)
self.env_info.CXX = os.path.join(bin_folder, 'g++')
self.env_info.CC = os.path.join(bin_folder, 'gcc')
linux-x86_64
表示Linux 64位环境的柯南配置文件如下: [settings]
os=Linux
os_build=Linux
arch=x86_64
arch_build=x86_64
linux-x86_64-Debug
代表Linux 64位版本环境的柯南配置文件,如下所示: include(linux-x86_64)
[settings]
build_type=Debug
gcc-10.1.0
柯南配置文件以使用我的gcc
软件包构建软件包:[settings]
compiler=gcc
compiler.version=10.1
compiler.libcxx=libstdc++11
[build_requires]
gcc/10.1.0
cmake-3.18.2
柯南配置文件使用官方cmake
软件包构建软件包:[build_requires]
cmake/3.18.2
default
名侦探柯南7如果我尝试按以下方式构建软件包:
$ conan create . foo/version --build=missing -pr linux-x86_64-Debug -pr cmake-3.18.2 -pr gcc-10.1.0
结果配置为:
Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Debug
compiler=gcc
compiler.libcxx=libstdc++11
compiler.version=10.1
os=Linux
os_build=Linux
[options]
[build_requires]
*: gcc/10.1.0, cmake/3.18.2
[env]
在我看来合适...
然后柯南开始cmake
为gcc 10.1 x86_64配置构建软件包:
cmake/3.18.2: WARN: Build folder is dirty, removing it: /home/manuel/.conan/data/cmake/3.18.2/_/_/build/46c0026dddc0e0537a797652343e8e1e9d0e39e7
cmake/3.18.2: Copying sources to build folder
cmake/3.18.2: Building your package in /home/manuel/.conan/data/cmake/3.18.2/_/_/build/46c0026dddc0e0537a797652343e8e1e9d0e39e7
cmake/3.18.2: Generator cmake created conanbuildinfo.cmake
cmake/3.18.2: Calling build()
但是随后构建失败,因为cmake
软件包cmake config使用的是系统编译器:
-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /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: /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: Compiler GCC>=5, checking major version 10.1
-- Conan: Checking correct version: 7.4
CMake Error at ../conanbuildinfo.cmake:510 (message):
Detected a mismatch for the compiler version between your conan profile
settings and CMake:
Compiler version specified in your conan profile: 10.1
Compiler version detected in CMake: 7.4
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:592 (conan_error_compiler_version)
../conanbuildinfo.cmake:695 (check_compiler_version)
../conanbuildinfo.cmake:249 (conan_check_compiler)
CMakeLists.txt:9 (conan_basic_setup)
这看起来与https://github.com/conan-io/conan/issues/1842非常相似,但是该问题来自3年前。
柯南之前了解了一些有关主机和构建上下文的版本,并且能够管理这些上下文的不同配置。相对于旧版本os_build
,这是更可取的,arch_build
并且ConanCenter中的设置和软件包正在朝着此新功能迈进。
在您的方案中,您尝试构建一个library
using包,gcc
并且cmake
按照构建要求进行构建。您正在建设library
的主设备,并使用封装gcc
和cmake
提供应在运行的工具构建的机器。即使您不是交叉编译的,我们也可以同意本机构建只是一个特定的用例,其中主机和构建是同一台机器,因此它们使用相同的柯南配置。
回到您的示例。您需要用于主机平台的配置文件,即您要为其生成配置文件的配置文件library
。这些是您在问题中列出的所有个人资料。但是,您还需要一个用于构建上下文的配置文件,Conan将使用该配置文件来构建(或检索)gcc
和cmake
软件包。例如,在使用和在Release中时,您可能希望使用配置文件在调试模式下linux-x86_64-Debug
进行编译。library
gcc
cmake
通常,构建上下文的配置文件可以是柯南检测到的默认配置文件。
尝试使用以下命令代替您的命令(请注意--profile:build=default
):
conan create <library/conanfile.py> foo/version --build=missing --profile:host linux-x86_64-Debug --profile:host cmake-3.18.2 --profile:host gcc-10.1.0 --profile:build=default
现在,柯南将使用新功能并将程序包分配给相应的上下文:
library
并将其所有依赖项分配给宿主上下文,并将使用所有--profile:host
配置文件中的信息:您的Debug构建和Conan将添加,cmake
并且gcc
按构建要求。gcc
和cmake
,因为它们是此命令中的build-requires,将被分配给build上下文,并将使用中的信息--profile:build
。如果Conan需要构建这些软件包,它将使用该配置文件中的设置,而不是主机配置文件中的设置。通过此设置,您可以一次运行跨构建方案中的所有软件包:宿主上下文中的软件包将使用您的build-requiresgcc
进行构建,而构建上下文中的软件包将使用中定义的工具--profile:build
。
是的,在这种情况下,在包构建上下文将使用编译器从系统....除非你声明[build_requires]
内--profile:build
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句