MakeFile基础总结

来源:互联网 发布:文华模拟交易软件 编辑:程序博客网 时间:2024/06/06 03:47

MakeFile基础总结

 

什么是makefile

          Makefile是一个工程项目的一种编译规则。在没有IDE的情况下,要编译一个有大规模文件的工程项目,就要书写makefile来指定编译的规则。

Makefile规则

        1.定义目标。目标应该在一行的开头定义加个冒号,不能加空格或其他字符,可以是一个文件,也可以为是其他伪目标。

        2.依赖。写在目标冒号后面

        3.命令:每一行以tab键开头,如用GCC编译一个文件,简单的makefile的命令如下。

Foo: foo.o                                #foo为可执行文件目标,foo.o为依赖文件          

Gcc   -o  foo.o   foo.o #gcc编译

        4.定义变量与使用:在一行的开始,变量名+ 等号/冒号等号 + 值,使用时,                                        $(变量名),如:

CC=gcc

$(CC) –o foo.o foo

        5.通配符:%,通配一个字符,*,通配任意个字

        6.伪目标:如能过编译.c文件生成目标.o文件,再链接生成可执行文件,则清除.o文件可执行以下指令,rm  –f *.o,如果可控制这个指令是否执行,则定义一个目标clean:,为了避免这个目标与文件重名,可以指定.PHONY。如

.PHONY:clean

Clean:

            Rm    -f   *.o

 

 

 

变量

            Makefile的变量有自动化变量,环境变量,目标变量,模式变量

自动化变量:

$<取出第一个依赖项

$^取出所有的依赖项
$@一个一个将目标变量的值取出

环境变量:类似于全局变量

模式变量:使用至少一个%

 

函数

调用语法:$(function   arguments1, argument2…)

如:bar= $(sort 2 5 23 56 234 64)

常用的函数有subst,字符串处理函数

sort,排序函数

dir,取目录

notdir,取文件

foreach,循环

if,条件

shell,执行shell命令

call,处理多个参数

origin,获取变理的来源

error处理make函数

条件判断

Ifeq(,)

            command

Else

            command

endif

            command

隐含规则

            Makefile的隐含规则能自动执行一些命令,如gcc编译,.c.o文件是makefile认识的,因此它能能自动处理这些转

 

嵌套调用

        Make可以嵌套调用,并肯可以往下层make传递参数。如

Start:

            Cd  $(dir) && $(MAKE)

 

一个例子

Gcc 编译并链接一个简单的加减乘除的例子:


 

 

CC=gcc

SRCS=main.c Add.c\

            Sub.c\

            Mul.c\

            Dev.c

OBJS=$(SRCS:.c=.o)

EXEC=main

Start:$(OBJS)

            $(CC)  -o $(EXEC) $<

%.o:%.c:

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

.PHONY:clean

Clean:

            Rm –f *.o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0