You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于RPM spec文件中%{arm}预定义变量的技术咨询

关于RPM Spec中%{arm}预定义变量的详解

你猜的没错!%{arm}是RPM构建系统内置的预定义架构宏(变量),完全不需要用户手动定义就能直接在spec文件中使用,和你自己用%global shared 0定义的自定义变量不是一个类型。下面给你拆解清楚:

1. 预定义架构宏的本质

RPM工具(rpmbuild)会根据当前构建环境的CPU架构,或者你通过--target参数指定的目标架构,预先内置了一系列对应不同硬件架构的宏。这些宏的作用就是帮你在spec文件中快速做架构专属的条件分支处理,比如只在ARM架构下应用特定补丁、添加专属编译参数,或者调整打包内容。

2. 怎么验证/查看这些预定义宏

如果你想确认某个架构宏的存在或者它的取值,可以用rpm --eval命令直接展开变量:

# 查看%{arm}的取值,如果当前是ARM架构环境,会输出arm;非ARM环境则输出空
rpm --eval '%{arm}'

# 查看64位ARM架构宏%{aarch64}的取值
rpm --eval '%{aarch64}'

如果想一次性查看RPM所有的预定义宏(包括架构相关和其他全局宏),可以执行:

rpm --showrc

你可以用grep过滤出架构相关的宏:

rpm --showrc | grep -E '^-.*arch'

3. 常见的预定义架构宏例子

除了%{arm},日常打包中常用的还有这些:

  • %{x86_64}:64位x86架构(也就是常说的AMD64)
  • %{i386}:32位x86架构
  • %{aarch64}:64位ARM架构(ARM64)
  • %{ppc64le}:小端模式的64位PowerPC架构
  • %{s390x}:IBM z系列64位架构

4. 实际用法场景

比如你要给ARM架构单独打补丁,就可以在spec里这么写:

%ifarch %{arm} %{aarch64}
# 只在ARM/ARM64架构下应用这个补丁
Patch100: arm-specific-fix.patch
%endif

或者针对不同架构设置不同的编译参数:

%ifarch %{arm}
CFLAGS="%{optflags} -march=armv7-a"
%endif

这些预定义宏是RPM打包体系中用来适配多架构的核心工具之一,不用自己去手动判断架构,直接用这些内置宏就够省心啦。

内容的提问来源于stack exchange,提问作者Stephen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:19:32