Makefile快速上手(1)

Makefile的编写格式:

target:prerequisites
       command
target 是编译目标,在编译的时候输入“make target”就可以执行 target 的规则。target 既可以是目标文件,也可以是可执行文件,还可以是一个标签
prerequisites 是依赖关系文件,即生产 target 所需要的文件或者目标。
command 是生成 target 所需执行的命令。

以编写一个hello.c为例写一个makefile文件

一、无关联的程序文件

如果只是想要编译一个可执行文件

可以执行指令:gcc *.c -o *,举例如下:

Makefile快速上手(1)_第1张图片

如果一个 Makefile 文件有多个伪目标,即想要同时生成.o文件或者可执行文件,可以分多行单独声明,也可以将多个伪目标一 并声明,各伪目标之间用空格隔开。

如果想要生成.o文件与可执行文件,操作如下:

Makefile快速上手(1)_第2张图片

结果如下:

Makefile快速上手(1)_第3张图片

如果只要生成可执行文件,操作如下:

Makefile快速上手(1)_第4张图片

结果如下:

Makefile快速上手(1)_第5张图片

注意:clean若加了“-”,clean 出错但被忽略,而不加“-”则 不忽略

二、有关联的程序文件

创建以下文件

文件内容如下:

Makefile快速上手(1)_第6张图片

makefile内容如下:

Makefile快速上手(1)_第7张图片

编译生成如下:获得可执行文件main及.o文件

Makefile快速上手(1)_第8张图片

注意:编译目标与依赖文件(即.c文件)的关系

自定义变量

为了能增强 Makefile 文件的通用性, 并简化 Makefile 文件编写。make 支持在 Makefile 文件中定义变量。

变量的定义和赋值方法通常是: VAR=value 在用到变量的地方,通过美元符号($)和括号()一起来完成变量引用,如$(VAR)。

对于刚开始的 hello.c 的 Makefile,如果定义源文件 SRC 和可执行文件 EXE 两个变量,对 Makefile 进行改写,可如下:

Makefile快速上手(1)_第9张图片

效果如下:

Makefile快速上手(1)_第10张图片

变量如果有多个值,可直接在等号(=)后面列出,如:

SRC = hello.c hello1.c hello2.c 

值除了直接用等号(=)赋值外,还可以使用追加符号(+=)进行追加:

SRC = hello.c 
SRC += hello1.c
SRC += hello2.c

如果赋值很长,还可以使用换行符(\)进行换行处理:

 SRC = hello.c \ 
       hello1.c \
       hello2.c

可以在 Makefile 中加注释,对文件或者其中一些变量、规则进行说明,有助于文件阅 读和理解,注释行以井号(#)开始并顶格。

makefile 变量

其实,make 本身有一些特殊变量可以在 Makefile 中使用,能进一步简化 Makefile 的编 写。这些特殊变量包括:环境变量、自动变量和预定义变量。

自动变量不用定义,且会随着上下文的不同而发生改变。make 的自动变量都是一些比 较难记住的符号,都以美元符号($)开头。使用了自动变量的 Makefile 文件读起来会显得 抽象和生涩一些。常用的 make 自动变量如表

Makefile快速上手(1)_第11张图片

接下来我们来看关联程序多文件下使用自动变量编写的makefile,如下所示:

Makefile快速上手(1)_第12张图片

效果如下:

Makefile快速上手(1)_第13张图片

这个 Makefile 和前面看到过的相比,增加了几点内容:

(1) 增加了目标和依赖;

(2) 编译多个 c 文件,多个文件用空格隔开;

(3) 使用了自动变量。

预定义变量。

make 的预定义变量用于定义程序名称以及传递给这些程序的参数和标志 位等。常见的预定义变量和描述如表

Makefile快速上手(1)_第14张图片
Makefile快速上手(1)_第15张图片

对前一个 Makefile 进行一些更改,增加-g 的编译选项,并用上预定义变量进行改写。

Makefile快速上手(1)_第16张图片

效果如下:

Makefile快速上手(1)_第17张图片

你可能感兴趣的:(其他内容,arm,物联网,嵌入式硬件,tcp/ip,stm32)