文章目录
Makefile 格式
下面我们再总结一下Makefile中跟目标相关的语法:
[目标1]:[依赖]
[命令1]
[命令2]
[目标2]:[依赖]
[命令1]
[命令2]
伪目标
Makefile使用“.PHONY”前缀来区分目标代号和目标文件,并且这种目 标代号被称为“伪目标”,phony单词翻译过来本身就是假的意思。
“-X”相关知识点
make 命令中-f
在终端上执行make命令时,make会在当前目录下搜索名为“Makefile”或“makefile”的文件,然后根据该文件的规则解析执行。如果要指定其它文件作为输入规则,可以通过“-f”参数指定输 入文件,如“make -f 文件名”。
编译命令中 “-I .”
“-I .”是告诉编 译器头文件路径,让它在编译时可以在“.”(当前目录)寻找头文件
基本语法
-
“=” :延时赋值,该变量只有在调用的时候,才会被赋值
-
“:=” :直接赋值,与延时赋值相反,使用直接赋值的话,变量的值定义时就已经确定了。
-
“?=” :若变量的值为空,则进行赋值,通常用于设置默认值。
-
“+=” :追加赋值,可以往变量后面增加新的内容。
自动化变量
函数即表示格式
notdir函数
notdir函数用于去除文件路径中的目录部分
#以下是范例
$(notdir ./sources/hello_func.c)
#输出
hello_func.c
wildcard函数
wildcard函数用于获取文件列表
#在sources目录下有hello_func.c、hello_main.c、test.c文件
#执行如下函数
$(wildcard sources/*.c)
#函数的输出为:
sources/hello_func.c sources/hello_main.c sources/test.c
wildcard函数
wildcard函数用于获取文件列表,并使用空格分隔开。函数执行后会把当前目录的所 有c文件列出。
#在sources目录下有hello_func.c、hello_main.c、test.c文件
#执行如下函数
$(wildcard sources/*.c)
#函数的输出为:
sources/hello_func.c sources/hello_main.c sources/test.c
patsubst函数
patsubst函数功能为模式字符串替换
$(patsubst %.c, build_dir/%.o, hello_main.c )
#函数的输出为:
build_dir/hello_main.o
#执行如下函数
$(patsubst %.c, build_dir/%.o, hello_main.xxx )
#由于hello_main.xxx不符合匹配规则"%.c",所以函数没有输出
综合分析
-
SRCS = $(wildcard $(SRC_DIR)/*.c)
取出SRC_DIR中所有.c文件附给SRCS -
$(patsubst %.c, $(BUILD_DIR)/%.o, $(notdir $(SRCS)))
表示先将SRCS中的文件取出吧后缀.c编译成.o文件 -
CFLAGS = $(patsubst %, -I%, $(INC_DIR))
表示将INC_DIR路径加-I,表示存入路径