Makefile Quick Reference Card(整理)

Makefile Quick Reference Card

 

常规伪目标:

.                    PHONY          make说明不管是否有这个文件,这个目标就是伪目标。

all            所有目标的目标。

clean        删除所有make创建的文件。

install        安装已编译好的程序,其实就是把目标执行文件拷贝到指定的目标中。

print        列出改变过的源文件。

tar           把源程序打包备份。

dist          创建一个压缩文件,一般是把tar文件压成Z文件或gz文件。

TAGS        更新所有的目标,以备完整地重编译使用。

checktest

        这两个一般用来测试makefile的流程。

 

常用自动化变量

$@       目标文件集。

$%       仅当目标是函数库文件,表示规则中的目标成员名。如,一个目标是foo.a(bar.o),那么,"$%"就是"bar.o""$@"就是"foo.a"

$<        依赖文件集,如果依赖目标是以模式(即"%")定义的。

$?       所有比目标新的依赖目标的集合。

$^       所有的依赖目标的集合。

$+       很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。

$*       表示目标模式中"%"及其之前的部分。后缀是make所不能识别的,那么"$*"就是空值。

 

make的参数

“-b”

“-m”      忽略和其它版本make的兼容性。

“-B”

“--always-make”

所有的目标都需要更新(重编译)。

“-C <dir>”

“--directory=<dir>”

指定读取makefile的目录。

“—debug[=<options>]”

输出make的调试信息。有几种不同的级别,如没参数,输出最简单的调试信息。下面是<options>的取值:

    a ——输出所有的调试信息。

b——只输出简单的调试信息。    v ——b选项的级别之上。

    i ——输出所以的隐含规则。

    j ——输出执行规则中命令的详细信息。

    m ——输出make读取makefile,更新makefile,执行makefile的信息。

“-d”

相当于“--debug=a”

“-e”

“--environment-overrides”

指明环境变量的值覆盖makefile中定义的变量的值。

“-f=<file>”

“--file=<file>”

“--makefile=<file>”

指定需要执行的makefile

“-h”

“--help”

显示帮助信息。

“-i”

“--ignore-errors”

在执行时忽略所有的错误。

“-I <dir>”

“--include-dir=<dir>”

指定一个被包含makefile的搜索目标。

“-j [<jobsnum>]”

“--jobs[=<jobsnum>]”

指同时运行命令的个数。

“-k”

“--keep-going”

出错也不停止运行。

 “-l <load>”

“--load-average[=<load]”

“—max-load[=<load>]”

指定make运行命令的负载。

“-n”

“--just-print”

“--dry-run”

“--recon”

仅输出执行过程中的命令序列,但并不执行。

“-o <file>”

“--old-file=<file>”

“--assume-old=<file>”

不重新生成的指定的<file>,即使这个目标的依赖文件新于它。

“-p”

“--print-data-base”

输出makefile中的所有数据,包括所有的规则和变量。

“-q”

“--question”

不运行命令,也不输出。仅仅是检查所指定的目标是否需要更新。如果是0则说明要更新,如果是2则说明有错误发生。

“-r”

“--no-builtin-rules”

禁止make使用任何隐含规则。

“-R”

“--no-builtin-variabes”

禁止make使用任何作用于变量上的隐含规则。

“-s”

“--silent”

“--quiet”

在命令运行时不输出命令的输出。

“-S”

“--no-keep-going”

“--stop”

取消“-k”选项的作用。

“-t”

“--touch”

把目标的修改日期变成最新的。

“-v”

“--version”

输出make程序的版本、版权等信息。

“-w”

“--print-directory”

输出运行makefile之前和之后的信息。

“--no-print-directory”

禁止“-w”选项。

“-W <file>”

“--what-if=<file>”

“--new-file=<file>”

“--assume-file=<file>”

假定目标<file>需要更新,如果和“-n”选项使用,那么这个参数会输出该目标更新时的运行动作。如果没有“-n”那么就像运行UNIX“touch”命令一样,使得<file>的修改时间为当前时间。

“--warn-undefined-variables”

           make发现有未定义的变量,那么就输出警告信息。

 

条件控制

  libs_for_gcc = -lgnu

    normal_libs =

    foo: $(objects)

    ifeq ($(CC),gcc)

$(CC) -o foo $(objects) $(libs_for_gcc)

    else

$(CC) -o foo $(objects) $(normal_libs)

           Endif

 

循环控制

SUBDIRS= fs io ipc mem pty sched syscalls

all:

@set –e; for i in $(SUBDIRS); do $(MAKE) –C $$i ; done

install:

@set –e; for i in $(SUBDIRS); do $(MAKE) –C $$i  install ; done

clean:

@set –e; for i in $(SUBDIRS); do $(MAKE) –C $$i clean ; done

其中$$i表示SUBDIRS中的各个项。

 

常用函数

$(str:a=b)              str中的a替换成b

$(subst <from>,<to>,<text>)

$(patsubst <pattern>,<replacement>,<text>)

$(strip <string>)

$(findstring <find>,<in>)

$(filter <pattern...>,<text>)

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

$(sort <list>)

$(word <n>,<text>)

$(wordlist <s>,<e>,<text>)

$(words <text>)

$(firstword <text>)

 

$(dir <names...>)

$(notdir <names...>)

$(suffix <names...>)

$(basename <names...>)

$(addsuffix <suffix>,<names...>)

$(addprefix <prefix>,<names...>)

$(join <list1>,<list2>)

 

$(wildcard *.o)

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值