makefile的基本用法

makefile的基本用法

makefile基本规则

Target ... : dependencies ...

    command
    ...

Target: 程序生成的文件,或者要指向的动作,如clean

dependencies:目标文件依赖的文件

command:make执行的动作(以 TAB字符开始!!!)

dependencies 中文件更新时候,执行command

例如:

main:main.o add.o sub.o

    gcc -Wall -g main.o sub.o add.o -o main

伪目标.PHONY

如果当前目录下存在一个和makefile中的Target一样名字的文件的话,make Target就会失效,就需要使用伪目标,显示的指定Target。

定义变量

makefile自动化变量

  • $@:规则的目标文件名
  • @<:规则的第一个依赖文件名
  • $^:规则的所有依赖文件列表

例如:

add.o:add.c add.h

$@ 为 add.o

$< 为 add.c

$^ 为 add.c add.h

自定义变量

var=.......
使用变量 $(var)

当目录下存在多个makefile文件的时候,可以通过-f参数指定需要的makfile文件

例如:

make –f makefile.1 自定义使用的makefile文件

模式匹配

  • 规则 1:%.o:%.c

    gcc -Wall -g -c $< -o $@

  • 规则 2:.c.o

    gcc -Wall -g -c $< -o $@

规则2注意 .c.o之间不能由空格

编译多个可执行文件

makefile 默认生成第一个对象

如果需要生成多个可执行文件的话,则需要把它们放在第一个对象

例如:

.PHONY:clean all

OBJ=test1 test2

all:$(OBJ)

make常用内嵌函数

    • 函数调用

      $(function arguments)

    • $(wildcard 模式)

      当前目录下匹配模式的文件:src = $(wildcard *.c) ,获取所有.c文件

    • $(src :%.c=%.o), 把src的 .c替换为.o

      obj = $(src:%.c=%.o)

    • shell函数 执行shell命令: $(shell ls –d */) -> 获取所有子目录

posted @ 2018-01-23 09:03  菜鸟也有高飞的时候  阅读(1089)  评论(0编辑  收藏  举报