1. .PHONY 声明的目标总是被调用
.PHONY:zzg echo "hello zzg" @echo "good morning" # @符号表示不显示被执行的命令,但是会执行。
2. $(info start working) info 是make内置的函数,后面跟的是参数,打印消息,类似的函数还有warning,error,不同的是error在打印完消息后会终止执行并退出。
3. 调用make
$make -f Makefile target_in_makefile
4. 赋值符号
:= 在makefile被解析时就立即展开并赋值 (立即展开)
= 只有当所定义的变量在使用时才展开 (延迟展开)
?= 条件赋值,只有该变量还没有值时才赋值 (延迟展开)
+= 附加赋值 (出现在target后面会延迟,而普通情况下会立即展开)
5. 条件控制语句
if-condition text if the condition is true endif if-condition text if the condition is true else text if the condition is true endif 其中condition只能进行两种判断,一种是判断表达式是否相等,另一种是判断表达式是否被定义: ifdef var ifndef var ifeq (a, b) ifneq (a, b)
6. 宏(函数)定义
按调用方式可以分为三类
a). make内置函数调用 $(func_name, param...) b) 用户定义函数 $(call func_name, param...) c) 用户定义的无参函数,也成为宏 $(func_name) 函数的定义方法: define func_name command # 命令前没有tab键,宏被展开时make解释器会自动添加 endef 函数参数的获取: $(0) 函数名 $(1) 第一个参数
7.常用函数
a)字符串操作函数 $(filter pattern..., text) $(filter-out pattern..., text) $(findstring string, text) $(subst from, to, text) $(patsubst from, to, text) $(strip text) $(words text) $(word n, text) $(firstword, text) $(wordlist start, end, text) $(sort list) b) 文件名操作 $(wildcard *.c) $(dir f1.c src/f2.c) $(notdir f1.c src/f2.c) $(suffix f1.c f1.h) $(basename f1.c src/f1.h) $(addsuffix .c, f1 src/f2) $(addprefix src/, f1.c f2.c) $(join f1 f2, .c .h) c) 过程控制函数:前面的ifeq、ifneq是脚本解析的时候起作用,有点像c语言的宏,即预处理。过程控制则需要函数来完成 $(if condition, then-part, else-part) #condition为true的条件是其不为空 $(error text) $(foreach variable, list, body) eg: $(foreach name, zhao wang zhao qian, $(shell echo hello $(name)\,))
8. 内置符号
$@ target名称 $* 和$@类似,只是不包含target的后缀 $^ 所有先决条件名称,以space分隔,自动去重 $? 有更新的先决条件列表, 例如有4个先决条件,其中有3个甘冈被修改过,则$?就代表刚刚被修改过的先决条件,以空格分隔 $+ 所有先决条件,和$^类似,只是$+包含了重复的先决条件,而$^会去重 $< 第一个先决条件
9. 目标特定的变量赋值
tar2:CFLAGS= #只对此编译起作用
tar:
gcc $(CFLAGS) main.c
======
tar2: override CFLAGS= # override 完胜
tar:
gcc $(CFLAGS) main.c
========
make tar2 -e CFLAGS="-c -g"
10. 常用选项
-e --environment-overrides: 强制使用make命令参数中的变量赋值
-t --touch 仅更新文件的时间戳,却不执行target对应的命令
-c --directory 指定要执行那个的makefile的路径
-f --file 指定make用的文件
-n --just-print 仅打印要执行的命令,不真正执行,方便分析
-l 指定 编译时所需要的lib文件例如lName 寻找 libName.so ,如果没有再找 libName.a
11. 隐含规则:
a) 后缀规则
.c.o: # 后缀成对出现,将.c转换为.o
gcc -c -o $@ $<;
b) 模式规则
%.c:%.o
gcc -c -o $@ $<;
12. 内置符号:
$^ 所有依赖集合,去重后的
$+ 所有依赖集合,没有去重
$? 所有依赖集合中比目标新的文件的集合
$< 依赖集合中的第一个文件
$* 不包含扩展名的目标文件名称。
$@ 目标的完整名称
$% 如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称
为 mytarget.so(image.o),则 $@ 为 mytarget.so,而 $% 为 image.o。
相关推荐
在Windows操作系统上安装GNU Make是开发过程中的常见需求,尤其是对于那些经常进行C或C++编程,或是使用基于Makefile的构建系统的人来说。GNU Make是一个自动化构建工具,它能够读取名为“Makefile”的文件,根据...
**GNU Make 4.2.1 知识详解** GNU Make是开源软件开发中的一个关键工具,用于自动化构建过程,特别是在C/C++等编译型语言的项目中。它的核心功能是读取名为Makefile的文件,根据其中的规则来执行一系列命令,以构建...
《Windows环境下Make工具详解——以make-4.2.tar为例》 在计算机编程领域,构建系统是项目开发不可或缺的一部分,而Make工具就是其中的一种经典构建工具。尤其在Linux和Unix系统中,Make广泛用于自动化编译和链接...
"Windows下的make 3.81"指的是在Windows环境下使用GNU Make 3.81版本进行项目构建。GNU Make是一个强大的自动化构建工具,它根据一系列规则(即makefile)来编译、链接源代码,生成可执行文件。这个场景中,配合GCC/...
在Linux系统中,`make`是一个非常重要的工具,它帮助开发者构建、编译源代码,大大简化了软件的编译过程。在CentOS 7环境下,由于网络限制或安全策略,有时我们需要离线方式进行源码安装`make`。本文将详细介绍如何...
《make-3.81在Windows环境下的应用与安装》 `make-3.81.rar`是一个包含`make-3.81.exe`可执行文件的压缩包,主要用于在Windows 10操作系统中安装`make`命令工具。`make`是软件构建工具,它在编程领域中扮演着至关...
"Windows 64位的make工具"是指在64位Windows操作系统上使用的构建系统工具,它使得开发者能够在该平台上执行类似Unix/Linux系统的make命令来管理项目构建流程。在Windows环境下,make工具通常被用来协调C++或者其他...
This directory contains the 3.82 release of GNU Make. See the file NEWS for the user-visible changes from previous releases. In addition, there have been bugs fixed. Please check the system-specific...
标题中的"make环境包.zip"表明这是一个包含了用于在没有预装`make`环境的Linux服务器上编译软件的资源包。`make`是Unix/Linux系统中一个非常重要的工具,它帮助开发者自动化编译过程,使得构建复杂项目变得更为便捷...
在Linux操作系统中,`make`命令是一个至关重要的工具,它用于自动化构建软件项目。当我们从源代码编译软件时,`make`可以帮助我们遵循特定的规则和依赖关系,有效地执行编译过程。在这个场景中,我们关注的是`make`...
GNU Make for Windows是一个专为在Windows操作系统环境下使用的版本管理工具,它是GNU项目的一部分,由GNU组织开发和维护。Make工具是构建自动化系统的核心,它能够根据预定义的规则自动编译和链接源代码,极大地...
GNU make(通常简称为make)是一款广泛使用的构建工具,它读取Makefile文件中的指令,然后控制编译过程,自动化处理编译规则。本文将介绍GNU make的版本3.80,中文手册中提到的核心知识点涵盖了make的基本用法、语法...
GNU make是一款在Linux环境下广泛使用的自动构建工具,它通过读取Makefile文件中定义的依赖关系来自动化编译、链接和安装程序。Makefile是一种脚本文件,其中包含了如何编译和链接程序的规则和指令。学习makefile...
【标题】"make.exe希望对你有用"所涉及的知识点主要集中在`make.exe`这个程序上,它是构建自动化工具的一部分,通常在开发C/C++程序时使用。`make.exe`是GNU Make的Windows版本,用于协调编译过程,使得开发者可以...
GNU make 是一个强大的自动化构建工具,它在软件开发过程中扮演着至关重要的角色。这个压缩包“GNU make-3.79.1.tar.gz”包含了GNU make的3.79.1版本源代码,允许用户在自己的系统上编译和安装这款软件。 1. **GNU ...
标题 "GnuWin32-Make3.81" 指的是一个针对Windows平台的开源软件项目,它使得用户可以在Windows系统上使用GNU的Make工具。Make是构建自动化工具,主要用于编译和链接源代码,是软件开发过程中的重要组成部分。在...
GNU Make是一款在Unix和其他操作系统上广泛使用的软件构建工具。自从1970年诞生以来,Make一直都是程序开发项目的必备工具,甚至在编译Linux内核时也扮演着核心角色。这本书《GNU Make项目管理(第三版)》由OREILLY...
安卓9.0 make_ext4fs文件,make_ext4fs用于Android平台上制作ext4文件系统的镜像。 make_ext4fs [ -l <len> ] [ -j <journal size> ] [ -b <block_size> ] [ -g <blocks per group> ] [ -i <inodes> ] [ -I ...
vmake 学习 make 学习 make 学习 make 学习
在Linux系统中,`make`是一个非常重要的工具,它用于自动化编译过程,根据Makefile文件来构建软件项目。在 Debian 7.7(代号为"Wheezy")这样的旧版系统中,`make`可能没有预装,因此用户需要手动安装。`make build`...