打包的构建环境作为配置文件的build_requires,而是使用系统编译器

Manu343726

我将尝试首先描述我的设置:

  • 柯南1.29.2
  • 官方cmake/3.18.2套餐
  • 包含其bin目录并设置env变量的自定义gcc软件包package_infoPATHCCCXX
    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年前。

jgsogo

柯南之前了解了一些有关主机构建上下文的版本并且能够管理这些上下文的不同配置。相对于旧版本os_build这是更可取的arch_build并且ConanCenter中的设置和软件包正在朝着此新功能迈进。

在您的方案中,您尝试构建一个libraryusing包,gcc并且cmake按照构建要求进行构建。您正在建设library设备,并使用封装gcccmake提供应在运行的工具构建的机器。即使您不是交叉编译的,我们也可以同意本机构建只是一个特定的用例,其中主机构建是同一台机器,因此它们使用相同的柯南配置。

回到您的示例。您需要用于主机平台的配置文件,即您要为其生成配置文件的配置文件library这些是您在问题中列出的所有个人资料。但是,您还需要一个用于构建上下文的配置文件,Conan将使用该配置文件来构建(或检索)gcccmake软件包。例如,在使用在Release中时,您可能希望使用配置文件在调试模式下linux-x86_64-Debug进行编译librarygcccmake

通常,构建上下文的配置文件可以是柯南检测到的默认配置文件。

尝试使用以下命令代替您的命令(请注意--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按构建要求。
  • gcccmake,因为它们是此命令中的build-requires,将被分配给build上下文,并将使用中的信息--profile:build如果Conan需要构建这些软件包,它将使用该配置文件中的设置,而不是主机配置文件中的设置

通过此设置,您可以一次运行跨构建方案中的所有软件包宿主上下文中的软件包将使用您的build-requiresgcc进行构建,而构建上下文中的软件包将使用中定义的工具--profile:build

是的,在这种情况下,在包构建上下文将使用编译器从系统....除非你声明[build_requires]--profile:build

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以指定一个配置文件,打包后用电子构建器编译的可执行文件可以访问吗?

strftime()函数显示系统编译器和在线编译器中的不同行为

系统编译器变量不会在合并的项目中被覆盖

与xml配置文件相比,注释(非编译器)的优点/缺点是什么

为Node tsc编译器指定systemJS配置文件

在柯南配置文件设置和CMake之间检测到编译器版本不匹配

如何复制配置文件作为打包的一部分以在部署中使用?

如何使用保存的发布配置文件构建TFS构建以预编译Web应用程序?

Maven打包-构建环境文件?

使用Clang作为编译器构建Android项目时,隐藏静态库中的符号

使用编译器插件定义配置

如何编译Groovy源而不是从文件系统编译

使用BSON作为配置文件

编译器与IDLE环境

如何使用 ExternalProject 的编译器构建可执行文件

使用LLVM构建Coreutils期间,C编译器无法创建可执行文件

如何使用AWS Code build创建特定于构建系统的环境文件

浏览器无法识别使用节点文件系统编写的html文件

使用Python构建编译器或解释器

配置文件构建与常规构建:CPU使用率?

如何可靠地修改构建配置并在C / C ++ RPM文件中添加编译器标志?

检测cmake文件中的编译器配置

使用msbuild执行文件系统发布配置文件

如何使CMake在系统PATH上使用默认编译器?

C编译器编译i = i ++是否合法?作为系统(“ rm -rf /”);?

配置编译器参数

使用更新的编译器在启动板上构建

使用不同的编译器构建Bazel

XCode编译器错误,使用CMake构建的项目