多目标规则在 Makefile 中的应用与示例

本文介绍了Makefile中的多目标规则,通过-C $@命令解释了如何在指定目录下执行命令。多目标规则使得针对多个目标执行相同命令变得简单。文中提供了一个实例,展示了如何为两个位于不同目录下的目标文件(target1和target2)设置相同的构建命令,通过运行make命令,在每个目标对应的目录中执行相应的Makefile。

在 Makefile 中,如果一个规则有多个目标,而且它们之间用空格分隔,我们称之为"多目标规则"。这意味着这个规则适用于列出的所有目标。

在目标下面的命令是“-C $@”,它通常与 make 命令关联在一起。它的作用如下:

  1. -C:这个参数告诉 make 在读取 Makefiles 或执行其他操作之前,先切换到指定的目录。如果指定了多个 -C 选项,那么每个选项都是相对于前一个选项解释的,例如:-C / -C etc 相当于 -C /etc

  2. $@:这是 Makefiles 中的一个特殊变量,表示当前正在构建的目标的名称。在多目标规则的情况下,当构建时,$@ 会获取每个目标的值。

所以,当执行这个规则时,make 会切换到当前目标($@)所指定的目录,然后在那个目录里执行其他指定的命令。这在你需要为多个目标在不同目录中执行相同命令的场景下非常有用。

下面是一个 Makefile 的例子,包括一个多目标规则。在这个例子中,我们有两个目标:dir1dir2。对于这两个目标,我们将使用相同的命令(make)在各自的目录中执行。

# Makefile 示例

# 多目标规则
dir1 dir2:
	@echo "当前目标: $@"
	@make -C $@

.PHONY: dir1 dir2

目录结构如下:

.
├── Makefile
├── dir1
│   └── Makefile
└── dir2
    └── Makefile

在这个例子中,每个子目录(dir1dir2)都有一个 Makefile。当我们在顶层目录运行 make 命令时,多目标规则将为每个目标执行相应的操作。

运行 make 命令的输出可能如下:

当前目标: dir1
make[1]: Entering directory 'dir1'
# 在这里输出 dir1 的 Makefile 执行结果
make[1]: Leaving directory 'dir1'
当前目标: dir2
make[1]: Entering directory 'dir2'
# 在这里输出 dir2 的 Makefile 执行结果
make[1]: Leaving directory 'dir2'

在这个例子中,-C $@ 命令告诉 make 在执行子目录中的 Makefile 之前切换到相应的目录。$@ 变量表示当前目标(dir1dir2)。这允许我们在不同目录中执行相同的命令,从而实现代码复用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值