Make 命令简单上手

1 什么是Make

​ 把代码编译(Compile)成可执行文件时,make命令可以用来定制编译规则,以及执行一些其它命令。使用make命令定制编译过程叫做构建(Build)。使用Make可以完成工程的高效自动编译。make使用Makefile文件来定制编译规则

2 Makefile文件格式

target : prerequisites
<tab> commands
  • tager:通常是文件,也可以为操作名,不可省略
  • prerequisites:前置依赖条件,一般是其它文件,可以省略(但是和commands必须存在一个)
  • commands:一行或者多行shell命令,可以省略(但是和prerequisites必须存在一个)

2.1 target

​ 一个目标(target)就构成一条规则。目标通常是文件名,指明Make命令所要构建的对象。目标也可以是多个文件名,之间用空格分隔;目标可以是操作名。

​ 当目标是操作名时,通常使用伪目标声明(PHONY),避免命令失效.

.PHONY: clean test
clean:
        rm *.o temp
test:
    bash test.sh

2.2 prerequisites

​ 前置条件通常是一组文件名,之间用空格分隔。它指定了”目标”是否重新构建的判断标准:只要有一个前置文件不存在,或者有过更新,”目标”就需要重新构建。

2.3 commands

​ 命令(commands)表示如何更新目标文件,由一行或多行的Shell命令组成。它是构建”目标”的具体指令,它的运行结果通常就是生成目标文件。每行命令之前必须有一个tab键。

3 Makefile语法

3.1 注释

# 井号表示注释

3.2 echoing 回声

正常情况下,make会打印每条命令,然后再执行,这就叫做回声(echoing)。

test : 
# 这是测试

命令的前面加上@,就可以关闭回声

test:
    @# 这是测试

3.3 通配符&匹配模式

通配符(wildcard)用来指定一组符合条件的文件名,与 Bash 一致

  • *: 可以匹配任何字符
  • ?: 匹配任意单个字符
  • […] : 匹配一个单字符范围
  • %:对同类型文件进行匹配
  %.o : %.c #所有的. o文件依赖于.c文件

3.4 变量

Makefile 允许使用等号自定义变量类似shell变量的用法,自定义变量可以实现类似C语言宏的功能。

OBJ_DIR = ./.obj/
SOURCE_DIR = ./src/
TARGET = multisum
GCC = gcc
CFLAGS = -lpthread

$(TARGET):$(OBJ)
    $(GCC) -o $(TARGET) $(OBJ) $(CFLAGS)

$(OBJ):$(SOURCE_FILE)
    $(GCC) -c $(SOURCE_FILE) -o $(OBJ)

参考自阮一峰的博客

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注