GNU make中文手册v3.8笔记

记录一些要点。 Make --help Usage: make [options] [target] ... Options: -b, -m Ignored for compatibility. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -d Print lots of debugging information. --debug[=FLAGS] Print various types of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from commands. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any commands; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no commands; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -R, --no-builtin-variables Disable the built-in variable settings. -s, --silent, --quiet Don't echo commands. -S, --no-keep-going, --stop Turns off -k. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. --no-print-directory Turn off -w, even if it was turned on implicitly. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. --warn-undefined-variables Warn when an undefined variable is referenced. 一、 概述 链接:ld工具,ELF格式 静态库: 文档文件Archive file,多个.o文件的集合,ar工具 共享库:多个.o文件的集合,具备可执行条件。libdl.so提供支持。 二、 GNU make介绍 .PHONY:clean clean : -rm edit $(objects) 加- 来忽略执行错误。 通过.PHONY特殊目标clean目标声明为伪目标。 三、 Makefile总述 包含五个部分:显式规则,隐含规则,变量定义,指示符,注释 搜索顺序:GNUmakefile makefile Makefile 包含其他makefile文件:include -include 变量: MAKEFILES,MAKEFILE_LIST, .VARIABLES 变量取值: = ?= := += define endef 条件语句: ifdef ifeq ifndef ifneq 总结:make的执行过程如下: 1. 依次读取变量“MAKEFILES”定义的makefile文件列表 2. 读取工作目录下的makefile文件(根据命名的查找顺序“GNUmakefile”, “makefile”,“Makefile”,首先找到那个就读取那个) 3. 依次读取工作目录makefile文件中使用指示符“include”包含的文件 4. 查找重建所有已读取的makefile文件的规则(如果存在一个目标是当前读取的某一个makefile文件,则执行此规则重建此makefile文件,完成以后从第一步开始重新执行) 5. 初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行分支 6. 根据“终极目标”以及其他目标的依赖关系建立依赖关系链表 7. 执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件) 8. 执行“终极目标”所在的规则 说明: 执行一个规则的过程是这样的: 对于一个存在的规则(明确规则和隐含规则)首先,make程序将比较目标文件和所有的依赖文件的时间戳。如果目标的时间戳比所有依赖文件的时间戳更新(依赖文件在上一次执行make之后没有被修改),那么什么也不做。否则(依赖文件中的某一个或者全部在上一次执行make后已经被修改过),规则所定义的重建目标的命令将会被执行。这就是make工作的基础,也是其执行规制所定义命令的依据。 四、 Makefile规则 文件名使用通配符: * ?[…] 函数wildcard: $(wildcard *.c) $(patsubst %.c,%.o,$(wildcard *.c)) 目录搜索: 一般搜索:VPATH=src:../headers 选择性搜索: vpath 可以使用%来匹配一个或多个字符。 五、 规则的命令 有一些shell命令行组成 命令的回显 @echo 命令执行: 命令执行的错误: - make忽略命令执行失败 Make的递归执行: subsystem: cd subdir && $(MAKE) 或 subsystem: $(MAKE) -C subdir 变量和递归: export 将变量传递给子make unexport 六、 Makefile中的变量 变量的引用: $(foo) ${foo} 七、 Makefile的条件执行 …… 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 …… ifneq ifdef ifndef 八、 make的内嵌函数 函数的调用语法:$(FUNCTION ARGUMENTS) ${FUNCTION ARGUMENTS} 文本处理函数: $(subst FROM,TO,TEXT) //字符串替换函数 $(patsubst PATTERN,REPLACEMENT,TEXT) //模式替换函数 $(strip STRINT) //去空格函数 $(findstring FIND,IN) //查找字符串函数 $(filter PATTERN…,TEXT) //过滤函数 $(filter-out PATTERN...,TEXT) //反过滤函数 $(sort LIST) //排序函数 $(word N,TEXT) //取单词函数 $(wordlist S,E,TEXT) //取字串函数 $(words TEXT) //统计单词数目函数 $(firstword NAMES…) //取首单词函数 文件名处理函数: $(dir NAMES…) //取目录函数 $(notdir NAMES…) //取文件名函数 $(suffix NAMES…) //取后缀函数 $(basename NAMES…) //取前缀函数 $(addsuffix SUFFIX,NAMES…) //加后缀函数 $(addprefix PREFIX,NAMES…) //加前缀函数 $(join LIST1,LIST2) //单词连接函数 $(wildcard PATTERN) //获取匹配模式文件名函数 $(foreach VAR,LIST,TEXT) $(if CONDITION,THEN-PART[,ELSE-PART]) $(call VARIABLE,PARAM,PARAM,...) $(value VARIABLE) eval函数 $(origin VARIABLE) shell函数 make的控制函数: $(error TEXT…) $(warning TEXT…) 九、 执行make 指定makefile: make –f 指定终极目标:部分标准的伪目标和空目标命名: all clean mostlyclean distclean realclean clobber install print tar shar dist TAGS check test 十、 make的隐含规则 隐含变量 代表命令的变量: AR AS CC CXX CO CPP FC GET LEX PC YACC YACCR MAKEINFO TEX TEXI2DVI WEAVE CWEAVE TANGLE CTANGLE RM 命令参数的变量: ARFLAGS ASFLAGS CFLAGS CXXFLAGS COFLAGS CPPFLAGS FFLAGS GFLAGS LDFLAGS LFLAGS PFLAGS RFLAGS YFLAGS 模式匹配 :% 自动化变量: $@ $% $< $? $^ $+ $* $(@D) $(@F) $(*D) $(*F) $(%D) $(%F) $(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值