make编译常见命令汇总

目录

makefile语法相关基础规则

$(变量名)——表此变量的值

@echo 命令体——命令会正常执行,但命令本身不回显(默认是显示命令到标准输出)

echo 命令体——echo后的命令体会执行也会回显

$(变量名)| tr "[:lower:]" "[:upper:]"——将变量名的所有字符由小写替换为大写

$(MAKE) ——总控makefile

makefile内部函数类

subst——字符串替换

$(wildcard PATTERN...)——自动匹配出符合PATTERN的所有文件,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。

notdir——去掉目标的路径,只保留文件名

Patsubst——替换通配符

$(addsuffix SUFFIX,NAMES…) ——加后缀

$(addprefix -L,$(LIBSDIR))——加前缀

$(CC) -lstdc++ -o $(TARGET) $(A) $(B) $(C) $(D)——进行编译

Liunx常用命令类

Compress——将两个文件合并

Strip——从特定文件中剥掉一些符号信息和调试信息,使文件变小

Makefile编译规则浅介

基本格式

必要规则


经过一段时间对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. 三要素中,目标不能不写,其他的可以不写。

おすすめ

転載: blog.csdn.net/qq_17846375/article/details/112578166
おすすめ