如何使用makefile

简介: 如何使用makefile

makefile 的语法

   

   1、变量替换

   如:    OBJS=*.o

   $(OBJS)  -- 使用变量


   2、在命令前加了1个‘@’,使 make 不打印出命令

   

   3、目标:依赖

       先执行依赖,在执行目标

       

       目标也可以写成多个

       all test:

           @echo "hello wrold"

       all 被视为默认目标

   

   4、增量编译

       通过文件的时间戳 来进行增量编译,如果依赖的文件比目标的文件时间要新,那么就会进行编译

   

   5、如果目标是all ,但是实际不生成all,而生成别的,

      连续make2次的话,其实第2次还是会执行一个编译生成可执行程序的命令,

      因为第2次make的时候,all没有找到(因为没有生成)

     

   6、伪目标 .PHONY

   采用.PHONY 关键字声明已个伪标后,make 并不会将其当作1个问件来处理,只是

   当作1个概念上的目标。对于假目标,我们可以想像的是由于并不与⽂件关联,所以每1次 make 这个假

   目标时,其所在的规则中的命令都会被执行

   

   7、定义变量

       使用$(变量名) 来使用

       

   8、自动变量  

       $@    --    目标

       @^    --    依赖

       $<    --    依赖中的第一个  , 一般用在 依赖里面写.h的时候

           例如

           $(DIR_OBJS)/%.o: %.c foo.h

           $(CC) -o $@ -c $<

           这样子做的话,.h有更新的时候,makefile 也能识别到

   

   9、系统的特殊变量  

       1、MAKE        --    编译工具

       2、MAKEGOALS    --    编译的目标

       

   10、条件赋值, ?=

       条件赋值的意思是当变量以前没有定义时,就定义它并且将左边的值赋值给它

       ,如果已经定义了那么就不再改变其值

   11、可以通过shell 命令行传入参数的值

       make x=2

   

   12、高级变量引用功能 修改后缀,或者替换指令字符

       .PHONY:all clean

       a=foo.o

       b=$(a:.o=.c)

       all clean:

           @echo x = $(b)

   

   

   13、override

       修饰的变量,不会被shell传入的值所修改

       

       

   14、模式, %.o,%.c 自动变量 的使用

   

   15、函数,wildcard,patsubst

       wildcard  获得我们所需的文件

       patsubst 替换字符串函数

       

   

       SRCS = $(wildcard *.c)

       $(patsubst %.c,%.o,$(SRCS))   -》把.c 替换为.o

   

       $(addprefix prefix,name)

       

       filter 根据模式获取需要的字符串

       file=a.c a.h b.o c.h g.c .p.cpp

       $(filter pattern..., text)

       all:

           @echo filter= $(filter %.c,$(file))

       

       filter-out  根据模式,过滤掉字符串

       $(filter-out pattern..., text)

       

       strip  去掉多余的空格

       $(strip $(var))

   

   

   16、在同一个shell中运行多个命令,用分号隔开,用\分行写

       因为对于规则中的每一个命令,make都是在一个新的shell上运行它的

相关文章
|
3月前
|
Shell Linux C++
Makefile编译实战
Makefile编译实战
55 0
|
6月前
|
C语言
Makefile教程(Makefile的结构)
Makefile教程(Makefile的结构)
42 0
|
5天前
Makefile(1)入门
Makefile(1)入门
17 0
|
1月前
|
编译器 测试技术
如何编写自己的Makefile(1)
如何编写自己的Makefile(1)
9 1
|
5月前
|
IDE 编译器 程序员
编写Makefile
编写Makefile
37 0
|
Shell Linux C语言
Makefile文件 | 编写指南
Makefile文件 | 编写指南
297 0
|
编译器 Shell C语言
Makefile文件 | 进阶指南
Makefile文件 | 进阶指南
299 0
|
IDE Linux Shell
【Makefile】简单的Makefile编写
【Makefile】简单的Makefile编写