makefile中的@ $ :

makefile中的@ $ :

MKCONFIG	:= $(SRCTREE)/mkconfig

smdk2410_config	:	unconfig
	@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

@$(MKCONFIG)   @表示在执行命令时不输出命令本身,只输出结果
                                $(MKCONFIG)表示(MKCONFIG) 这个变量的值mkconfig
$(@:_config=)      这里用到了makefile的变量替换规则,$(VAR:A=B)表示替换变量$VAR中的A为B,
                                即把$@中的_config替换为空变成smdk2410,$@ 目标文件,$^ 所有的依赖文件,$< 第一个依赖文件。


:= ,=,?=的区别
:=不递归赋值
= 递归赋值
?=默认值   
“:=” 的意思是,它右边赋得值如果是变量,只能使用在这条语句之前定义好的,而不能使用本条语句之后定义的变量;
于此对应的是“=”,当它的右边赋值是变量时,这个变量的定义在本条语句之前或之后都可以;
而“?=”是指,该符号左边的变量,如果在本条语句之前没有定义过,则执行本语句,如果已经定义,那么本语句什么都不做

$0 $1 $2 ……$n 表示命令行的参数,$0是命令本身,$1是第一个参数,$n是第n个参数

Makefile 中,`@$(MAKE) -C apps` 这一指令具有特定的含义和使用场景。 ### 含义 - `@`:这是 Makefile 中的一个特殊字符,其作用是在执行命令时,不将该命令本身输出到终端。通常,Makefile 在执行命令前会先把要执行的命令打印出来,使用 `@` 可以避免这种输出,让终端输出更加简洁。 - `$(MAKE)`:这是一个变量,它通常会被展开为 `make` 命令本身。在 Makefile 里使用 `$(MAKE)` 而非直接写 `make`,是为了确保在嵌套调用 `make` 时,使用的是当前正在执行的 `make` 程序,避免因系统中存在多个版本的 `make` 而产生混淆。 - `-C apps`:`-C` 是 `make` 命令的一个选项,它的功能是切换到指定的目录去执行 `make` 操作。`apps` 就是指定的目录名,也就是说,`-C apps` 会让 `make` 命令进入 `apps` 目录,然后在该目录下执行 `make` 操作。 综合起来,`@$(MAKE) -C apps` 的含义是:在不输出该命令本身的情况下,进入 `apps` 目录并执行 `make` 操作。 ### 用法 `@$(MAKE) -C apps` 常用于大型项目的分层构建。当项目规模较大时,通常会把项目拆分成多个子目录,每个子目录都有自己独立的 Makefile,负责编译该子目录下的代码。主 Makefile 可以通过 `@$(MAKE) -C` 指令,依次进入各个子目录,调用子目录下的 Makefile 进行编译。 以下是一个简单的示例,展示了如何在主 Makefile 中使用 `@$(MAKE) -C apps`: ```makefile # 主 Makefile all: @$(MAKE) -C apps clean: @$(MAKE) -C apps clean ``` 在这个示例中,当在主目录下执行 `make all` 时,会进入 `apps` 目录并执行 `make` 操作;执行 `make clean` 时,会进入 `apps` 目录并执行 `make clean` 操作。 假设 `apps` 目录下有如下 Makefile: ```makefile # apps 目录下的 Makefile target := app all: $(target) $(target): gcc -o $(target) main.c clean: rm -f $(target) ``` 这样,主 Makefile 就可以通过 `@$(MAKE) -C apps` 来调用 `apps` 目录下的 Makefile,实现分层构建。 ### 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值