目录
@echo 命令体——命令会正常执行,但命令本身不回显(默认是显示命令到标准输出)
$(变量名)| tr "[:lower:]" "[:upper:]"——将变量名的所有字符由小写替换为大写
$(wildcard PATTERN...)——自动匹配出符合PATTERN的所有文件,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。
$(addsuffix SUFFIX,NAMES…) ——加后缀
$(addprefix -L,$(LIBSDIR))——加前缀
$(CC) -lstdc++ -o $(TARGET) $(A) $(B) $(C) $(D)——进行编译
Strip——从特定文件中剥掉一些符号信息和调试信息,使文件变小
经过一段时间对makefile文件的学习和梳理,积累了很多命令,在此梳理下:
makefile语法相关基础规则
$(变量名)——表此变量的值
举例:
objects = main.o kbd.o command.o display.o
edit : $(objects)
等价于 edit : main.o kbd.o command.o display.o
@echo 命令体——命令会正常执行,但命令本身不回显(默认是显示命令到标准输出)
echo 命令体——echo后的命令体会执行也会回显
举例:
@echo “print message”,执行到这句的时候,不会再屏幕上输出print message
echo “print message”,执行到这句的时候,会再屏幕上输出print message
备注:该种情况仅适用于makefile,不适用shell,@echo不能被shell解析,shell也不存在命令回显
$(变量名)| tr "[:lower:]" "[:upper:]"——将变量名的所有字符由小写替换为大写
$(MAKE) ——总控makefile
subsystem:
cd subdir && $(MAKE)
其等价于:
subsystem:
$(MAKE) -C subdir
定义$(MAKE)宏变量的意思是,也许我们的make需要一些参数,所以定义成一个变量比较利于维护。这两个例子的意思都是先进入“subdir”目录,然后执行make命令。
我们把这个Makefile叫做“总控Makefile”,总控Makefile的变量可以传递到下级的Makefile中(如果你显示的声明),但是不会覆盖下层的Makefile中所定义的变量,除非指定了“-e”参数。
$(MAKE) –C $$dir || exit 1
转到dir这个目录下面make,如果执行结果为0(失败)就执行exit 1,意思就是返回错误。
makefile内部函数类
subst——字符串替换
用法:该函数有三个参数,第一个参数是被替换字符串,第二个参数是要替换成的字符串,第三个参数是发生替换操作的字符串。
举例:
$(subst FROM,TO,TEXT),即将TEXT(参数三)中的东西从FROM(参数一)变为TO(参数二)
$(wildcard PATTERN...)——自动匹配出符合PATTERN的所有文件,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。
举例:
$(wildcard *.c),获取当前目录下的所有的.c文件列表
notdir——去掉目标的路径,只保留文件名
举例:
dir=$(notdir $(wildcard ./sub/*.c)),目的是去除掉./sub/ 路径,只获取*.c文件列表
Patsubst——替换通配符
举例:
obj=$(patsubst %.c,%.o,$(wildcard *.c)),目的是将当前目录下找到的.c文件(wildcard的作用)都给替换成.o文件。
$(addsuffix SUFFIX,NAMES…) ——加后缀
函数功能:为“NAMES…”中的每一个文件名添加后缀“SUFFIX”。参数“NAMES…”
为空格分割的文件名序列,将“SUFFIX”追加到此序列的每一个文件名的末尾。
返回值:以单空格分割的添加了后缀“SUFFIX”的文件名序列。
示例:
$(addsuffix .c,foo bar) ,返回值为“foo.c bar.c”
$(addprefix -L,$(LIBSDIR))——加前缀
参见加后缀
举例:
$(addprefix fixstring,string1 string2 ...)
其中,fixstring表示任意要添加的固定前缀,在逗号的后面可以是一个或多个要添加前缀的子字符串,多个子字符串之间用空格隔开,当然,你也可以像前面的例子一样用变量。
$(CC) -lstdc++ -o $(TARGET) $(A) $(B) $(C) $(D)——进行编译
-o filename 输出的文件名。
如果你不使用这个选项,cc 为产生 出一个叫 a.out 的执行文件。
shell ——用来执行 shell 命令
Liunx常用命令类
Compress——将两个文件合并
Strip——从特定文件中剥掉一些符号信息和调试信息,使文件变小
举例:
strip a.out ,a.out的大小会变小
Makefile编译规则浅介
基本格式
目标:依赖
tab键 规则命令
必要规则
1. 依赖文件如果比目标新,则重新生成目标的文件。
2. 如果没有找到所写的依赖文件,就递推的去找能生成依赖文件的文件,并执行相应的命令,(即如果找不到".o",就会自动的去找".c"文件,先生成'.o"文件,再进行下面的操作)。
3.:默认处理第一个目标(隐含规则)
4. 三要素中,目标不能不写,其他的可以不写。