RISC-V 架构适配知识库
  • 睿迁工具集
  • RVSmartPorting
  • 简体中文
  • English (US)
在 Gitee 上查看
  • 睿迁工具集
  • RVSmartPorting
  • 简体中文
  • English (US)
在 Gitee 上查看
  • 简介
    • 贡献规范
  • 入门
    • 内存一致性模型
    • 硬件开发板差异
    • 指令集模块
  • 通用调整
    • 检查项目对多架构的支持性
    • 文件结构调整
    • 目录结构调整
    • 测试用例调整
  • C/C++ 程序
    • 内联汇编
    • 宏定义与判断
    • 移位运算中的整形常数
    • Intrinsic 函数
    • 多版本函数
    • 系统调用
  • 汇编程序
  • 编译配置文件
    • rpmbuild
    • Makefile
    • CMake
    • Autoconf
    • QMake
    • 其它
  • 其它编程语言
    • Rust
    • Go
    • Python
    • 其它语言
  • 辅助工具集
    • 目标代码定位工具
    • 汇编指令翻译工具

Makefile 配置文件

提示

本页面正在重构,内容将逐步更新。查看原版请 移步至此

Makefile 配置文件是 GNU Make 工具(以下简称 Make 工具)的配置文件, 该工具用于控制程序从 源文件 生成 目标文件 (包括 可执行文件 及其它 非源文件)的过程, 旨在将软件工程项目的编译过程自动化,提高软件开发效率。

相比单纯的编译控制脚本,Make 工具的主要优势在于支持 增量编译。 在编译整个软件项目时,Make 工具会根据 Makefile 中配置的依赖关系进行分析, 基于已更改的 源文件 自动确定需要更新哪些 目标文件,而无需重新编译所有文件。

在本知识库中,我们将 Makefile 归为 编译配置文件 的一种。 本章将着重阐述 Makefile 配置文件中针对 多目标架构 的处理方式。

Makefile 中判断主机架构的方式

Make 工具本质上是管理工具,具体的编译行为取决于 Makefile 文件中的配置及编译器, 因此 Make 工具既支持本地编译,也支持交叉编译。对于交叉编译而言, 目标平台通常是通过参数或配置显式指定的,通常不涉及额外的识别和判断。 因此本节重点探讨本地编译时如何确定主机的硬件架构。

Make 工具本身并没有提供获取主机架构的辅助方法,因此需要通过外部命令或工具实现。 目前较为常见的方式主要包括以下两种:

  • 通过系统命令 uname 获取主机架构
  • 通过 Autoconf 工具获取主机架构

通过系统命令 uname 获取主机架构

Make 工具可以通过 $(shell COMMAND ARGUMENTS) 结构执行 shell 命令并获取输出结果, 因此可以通过 Linux 系统命令 uname 获取主机的环境信息。 关于 uname 命令的具体细节,参见 通过系统命令 uname 获取主机架构信息

以下是在 Makefile 中通过 uname 命令获取主机架构后切换 INCDIR 变量取值的示例。

uname_m := $(shell uname -m)

# 写法1:预定义路径,根据变量名切换
INCDIR_x86_64 := -I./arch/x86_64
INCDIR_i386 := -I./arch/i386
INCDIR += $(INCDIR_$(uname_m))

# 写法2:直接合成路径
INCDIR += -I./arch/$(uname_m)

# 输出调试信息
$(info INCDIR=$(INCDIR))

通过 Autoconf 工具获取主机架构

在搭配 Autoconf 工具编写 Makefile 时,可将架构名称字段预留为一个变量, 由 Autoconf 生成的 configure 脚本负责填充。

编辑本页面
最后更新时间:
贡献者: LightningRS, lxy
Prev
rpmbuild
Next
CMake

本知识库采用 木兰开放作品许可协议 署名-相同方式共享 第1版 进行许可

版权所有 © 2025 RVSmartPorting. | 京ICP备20005262号 | beian京公网安备11010802043677号