Makefile学习

来源:互联网 发布:手机超强望远镜软件 编辑:程序博客网 时间:2024/04/27 13:32

MakeFile中给变量赋值:

A = $(B)

B = debug

此时A的值是debug

如果使用:

A := $(B)

B = debug

此时A的值为空,即使用 ":=" 来对变量赋值,则只能使用已经定义好的变量,如果变量前面没有定义,则使用空值来代替.

同时使用 "?="  来对变量赋值会先判断这个变量有没有在前面被定义过,如果没有定义,则给这个变量赋值,否则使用已经定义的值

"+="为当前变量追加内容

 

MakeFile中使用文件搜索路径:

vpath %.c $(APP_PATH)

上命令表示在APP_PATH变量所指路径下搜索所有的.c文件

 

MakeFile中的字符串替换函数原型:$(subst <from>,<to>,<text>)

例:$(subst , / , \ , $(APP_PATH) )

 

MakeFile中的 ".PHONY"符号使用

.PHONY:all

all:.....

.PHONY用于显示的指明一个目标为伪目标,目的说明不管是否有这个文件,这个目标都是伪目标.

 

MakeFile中的 "@echo"

.PHONY:complete

complete:

        @echo ------------------------------------------------

        echo ------------------------------------------------

输出为:

       -----------------------------------------------------

       echo ------------------------------------------------------

即在命令前加@符号不会输出命令信息

 

MakeFile中的$@表示当前依赖关系的目标文件集

@echo $@可以将其输出

 

MakeFile中的$(@F:.o=.c)

将$(@F)中的.o替换成.c,$(@F)表示$@中的文件名部分

 

MakeFile中的.SUFFIXES用于通知make新的扩展名

.SUFFIXES:清空所有的文件拓展名识别

.SUFFIXES:.o .c .s .mix .dep 声明五个文件拓展名

 

MakeFile中$*表示目标模式中"%"及其之前的部分.如果目标是"dir/a.foo.b",并且目标的模式是"a.%.b",那么"$*"的值就是"dir/a.foo".

如果目标中没有模式的定义,那么"$*"也就不能被推导出,但是,如果目标文件的后缀是make所识别的,那么"$*"就是除了后缀的那一部分.

例如目标是"foo.c",因为".c"是make所能识别的后缀名,所以,"$*"的值就是"foo".

                    $<表示依赖目标的第一个目标名字,如果依赖目标是以模式(即"%")定义的,那么"$<"表示依赖目标文件集

 

MakeFile中条件判断语句

ifneq , ifeq , ifdef , ifndef , else endif

ifeq的意思表示条件语句的开始,并指定一个条件表达式,表达式包含两个参数,以逗号分隔,表达式以圆括号括起。

else表示条件表达式为假的情况。endif表示一个条件语句的结束,任何一个条件表达式都应该以endif结束。

其中ifeq判断条件相等,ifneq判断条件不相等

        ifdef/ifndef判断变量是/否被定义

 

MakeFile中的$(filter <pattern>,<text>):从text中过滤出pattern所指的字符串

                        $(filter-out <pattern>,<text>);从text中过滤掉pattern后的字符串

例:$(filter all , $(MAKECMDGOALS) ):从变量MAKECMDGOALS中过滤出all字符串

 

MakeFile中的小短线"-",放在命令前面忽略命令错误

 

MakeFile中的$^:所有的依赖目标的集合.以空格分隔.如果在依赖目标中有多个重复的,那么会去除重复的依赖目标,只保留一份.

 

MakeFile中的$%:仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a(bar.o)",那么,"$%"就是"bar.o" , "$@"就是"foo.a"

如果目标不是函数库文件,则其值为空.

 

 

 

原创粉丝点击