RPM打包时如何切换编译器工具链

本文目的

近年来,LLVM编译器项目凭借其良好的架构及友好的license,社区活跃度增加明显,成为与GCC项目并列的开源的编译器巨头之一。目前一些OS社区(如openEuler社区)的软件包仍默认使用GCC工具链编译构建,本篇文章调研在RPM打包时如何切换构建工具链。

相关概念

  • RPM Package Manager (RPM) 是一个强大的命令行驱动的软件包管理工具,用来安装、卸载、校验、查询和更新 Linux 系统上的软件包。
  • YUM:RPM包管理工具,相比RPM工具,YUM可以自动设备软件包依赖关系,自动安装相关软件包。
  • rpmbuild:RPM软件包打包工具,根据SPEC文件引导创建rpm的二进制软件包和源码软件包。
  • SPEC文件:spec文件中包含了软件包的诸多信息,如软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作,以及软件包所要包含的文件列表等。
  • Clang:LLVM编译器项目C/C++前端。

实现方案

以名为test的软件包为例,假设此软件包默认用GCC构建,则可以通过如下步骤切换成Clang+LLVM。

  1. 在test.spec中,设置clang选项的默认值。
    # Option to enable compiling with clang,default is gcc
    %bcond_with clang
    
    值得注意的是,bcond_with和bcond_without的意义如下:

    【%bcond_with defaults value to 0】
    【%bcond_without defaults value to 1】

  2. 设置spec文件内部全局变量toolchain。
    %if %{with clang}
    %global toolchain clang
    %endif
    ```
    
  3. 根据是否打开clang编译,设置一些相应的动作,如依赖关系。
    %if %{with clang}
    BuildRequires: clang llvm
    %endif
    
  4. 关键的一步,设置编译器工具链。通常情况下,软件包允许开发者自定义编译器工具链,如make工具通过CC、CXX等宏设置。
    %if %{with clang}
    %global make_opts HOSTCC=clang CC=clang CXX=clang++
    %endif
    
  5. 执行编译
    make %{?make_opts}
    
  6. 软件包打包时增加–with选项,使能clang构建。
    rpmbuild -ba --with=clang test.spec
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值