【ARM 嵌入式 编译 Makefile 系列 19 - Makefile 多层依赖使用的详细介绍】


请阅读【ARM GCC Makefile 编译专栏导读】

Makefile 多层依赖

在 Makefile 中,通常定义一系列的目标(targets)来指定如何构建和管理项目。每个目标后面可以跟上它依赖的其他目标或文件,然后是一系列命令来实际执行构建动作。我们在Makefile 中可以看到类似如下代码:

default: prebuild all

default 是一个目标,而 prebuildall 是它的依赖项。下面将详细解释这个示例。

default 目标

default 是一个通常用于指定默认行为的目标名称。在许多 Makefiles 中,all 是用作默认目标的传统名称,但使用 default 也是可以的。当在命令行上直接运行 make 命令,没有指定任何目标时,make 将尝试构建 Makefile 中的第一个目标。因此,如果你想让 default 成为默认行为,它应该是 Makefile 中的第一个目标。

prebuild 依赖

prebuilddefault 目标的一个依赖项。这意味着,在开始构建 default 目标之前,make 将先尝试构建 prebuild 目标。通常,prebuild 会执行一些预处理步骤,比如生成必需的配置文件、检查依赖性、清理上一次的构建产物、或者执行其他任何为主要构建阶段准备的任务。

all 依赖

all 同样是 default 目标的一个依赖项,并且通常是用来构建项目中所有最终目标(比如可执行文件和库文件)的目标。在执行 all 目标的规则时,通常会调用编译器和链接器命令来构建整个项目或者是项目的主要部分。

示例 Makefile

default: prebuild all 

prebuild: 
	@echo "Running pre-build steps..." 
	# 在这里执行任何必要的预处理命令 

all: main.o other.o 
	gcc -o myprogram main.o other.o 
	@echo "Build complete!" 

main.o: main.c 
	gcc -c main.c 

other.o: other.c 
	gcc -c other.c 

在这个示例中:

  1. 如果你只输入 make 并执行,make 会首先尝试构建 default 目标。
  2. default 目标依赖于 prebuildall。make 首先执行 prebuild,然后执行 all
  3. prebuild 目标可能包含一些预备命令。
  4. all 目标依赖于 main.oother.o,make 会检查这些目标文件是否最新,如果不是,会先构建它们。
  5. 在完成 prebuild 和所有依赖目标之后,all 目标的命令被执行,通常这会链接所有对象文件生成最终的可执行文件。

记住,prebuildall 是用户定义的目标,它们的具体命令和动作将取决于你的具体需求和项目的结构。在实际的 Makefile 中,它们可以是任何你需要的预处理和构建步骤。

示例 Makefile:

all: subdirs-build 
	find . -name '*.o' -exec cp {} objs/ \; 

.PHONY: all subdirs-build 

在这个示例中,find 命令用于在当前目录及其所有子目录中查找扩展名为 .o 的文件,并使用 -exec 动作将找到的文件复制到 objs/ 目录中。

示例二

我们再看个比较复杂一点的例子:

DIRS := device driver
OBJS :=

TOTAL_OBJS :=
FILES_CLEAN := $(TARGET
  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
编译 gdb 和 gdbserver for arm-linux-gnueabihf 可以按照以下步骤进行: 1. 下载 gdb-9.2 源代码包,可以从官网 http://www.gnu.org/software/gdb/ 或者其他镜像站点下载,也可以使用 wget 命令从命令行下载: ``` wget https://ftp.gnu.org/gnu/gdb/gdb-9.2.tar.gz ``` 2. 解压源代码包: ``` tar -zxvf gdb-9.2.tar.gz ``` 3. 进入源代码目录: ``` cd gdb-9.2 ``` 4. 创建编译目录: ``` mkdir build-arm cd build-arm ``` 5. 运行 configure 脚本生成 Makefile: ``` ../configure --target=arm-linux-gnueabihf --host=x86_64-linux-gnu ``` 注意:需要根据所使用的交叉编译工具链修改 target 参数,例如 arm-linux-gnueabi、arm-linux-gnueabihf 等。 6. 编译: ``` make ``` 7. 安装 gdb: ``` sudo make install ``` 注意:需要将编译出的 gdb 文件复制到 ARM 开发板上使用。 8. 进入 gdbserver 目录: ``` cd ../gdbserver ``` 9. 创建编译目录: ``` mkdir build-arm cd build-arm ``` 10. 运行 configure 脚本生成 Makefile: ``` ../configure --host=arm-linux-gnueabihf ``` 11. 编译 gdbserver: ``` make ``` 12. 安装 gdbserver: ``` sudo make install ``` 注意:需要将编译出的 gdbserver 文件复制到 ARM 开发板上使用。 13. 可以使用 arm-linux-gnueabihf-gdb 命令测试 gdb 是否安装成功,使用 arm-linux-gnueabihf-gdbserver 命令测试 gdbserver 是否安装成功。 注意:编译 gdb 和 gdbserver 需要安装一些依赖库,例如 libncurses、libexpat、libreadline 等,可以使用包管理器安装或者手动编译安装,并且需要安装对应的交叉编译工具链。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公CodingCos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值