Makefile中的变量
文章目录
- 🍊自我介绍
- 🍊Makefile中的变量
- 常用的两种变量
- 普通变量
- 自动变量
- 代码实操
- fun.c
- fun.h
- main.c
- Makefile
你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~
🍊自我介绍
Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾” 和“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的相关内容。
🍊Makefile中的变量
简介:
Makefile中使用变量优点类似于C语言中的宏定义。使用该变量相当于内容替换,使用变量可以使Makefile易于维护,修改起来变得简单起来。
常用的两种变量
普通变量
普通变量,一般是用户自己根据需求定义的变量,变量的定义要做到见名知意。
示例:
"=“是最普通的,在Makefile中容易搞错赋值等号,使用”="进行赋值,变量的值是整个Makefile中最后被指定的值。
eg:
OBJ_A = A
OBJ_B = $(OBJ_A) B
OBJ_A = AA
all:
@echo "${OBJ_B}"
//经过上面的赋值后,最后OBJ_B的值是AA B,而不是A B;
因为在make命令时,会把整个Makefile展开,从而来决定变量最后的值
总的来说就是跟C语言的赋值结果不同,它是运行完所有行之后确定最终的赋值结果
":="表示直接赋值,赋予当前位置的值。
OBJ_A := A
OBJ_B := $(OBJ_A) B
OBJ_A := AA
all:
@echo "${OBJ_B}"
//这样最后OBJ_B的值是A B
"?="表示如果该变量没有被赋值,赋值其等号后面的值。
VAR := M
VAR ?= A
all:
@echo "{VAR}" //M ;如果没有VAR := M 则最后的结果为A
自动变量
变量名 | 含义 |
---|---|
$@ | 规则中的目标集合,在模式规则中,如果有多个目标的话,"$@"表示匹配模式中的目标集合 |
$< | 依赖文件集合中的第一个文件 |
$^ | 所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,会去除重复的依赖文件,只保留一份 |
举例子说明:
all : main.o fun.o
gcc main.o fun.o -o all
//一般我们会这么写gcc main.o fun.o -o $@
$@ : all
$< : main.o
$^ : main.o fun.o
代码实操
fun.c
#include "fun.h"
#include <stdio.h>
int global = 20;
void print_value()
{
printf("global = %d\n",global);
}
fun.h
#ifndef __FUN_H__
#define __FUN_H__
#include <stdio.h>
extern int global;
extern void print_value();
#endif
main.c
#include "fun.h"
int main()
{
print_value();
return 0;
}
Makefile
CC := gcc
TARGET := main_exec
OBJECT := main.o fun.o
$(TARGET) : $(OBJECT)
$(CC) $^ -o $@
%.o : %.c
$(CC) -c $^ -o $@
clean :
rm -rf *.o main_exec
最后操作和上一节最后的操作一样,就可以得到我们的结果