make工具的使用和Makefile文件的编写

- makefile文件的语法结构

目标1:依赖文件列表
<\tab>命令1
<\tab>命令2

<\tab>命令n
目标2:依赖文件列表
<\tab>命令1
<\tab>命令2

<\tab>命令n

* 请务必注意,在命令前面必须有tab键 ,也就是说 目标 与 命令 不是对齐的!*

- make工具

在命令行中的输入语法: make [选项] [目标]

选项 功能描述
-C dir 在读取规则文件之前,进入指定的目录dir
-f file 指定file文件作为存放规则的文件
-h 显示所有的make选项
-i 忽略所有的命令的执行错误
-I dir 当包含其他规则文件时,指定搜索目录
-n 只打印要执行的命令,不执行命令
-p 显示make变量数据库和隐含规则
-s 在执行命令时不显示命令
-w 在处理规则文件之前和之后,显示工作目录

例子1:


appexam:main.o app.o mod.o lib.o
<\tab>gcc -o appexam main.o app.o mod.o lib.o
main.o:mian.c app.h
<\tab>gcc -c main.c
app.o:app.c app.h
<\tab>gcc -c app.c
mod.o:mod.c
<\tab>gcc -c mod.c
lib.o:lib.c lib.h
<\tab>gcc -c lib.c
clean:
<\tab>rm -f *.o

* 注意clean以及clean后面的是一个为目标,这并不是为了生成一个clean的文件,而是执行命令,删除 .o格式 的文件 *

- makefile中的变量

make工具支持4种变量类型:自定义变量,环境变量,预定义变量,自动变量。

  1. 自定义变量

    • 语法:变量名=字符串
    • 功能:将“字符串”赋值给“变量名”,在makefile中变量没有数据类型
    • 引用:$(变量名)
    • 例子2:对例子1的代码增加一行,并且修改前两行,起到的功能是一样的
    OBJS=main.o app.o mod.o lib.o
    appexam:$(OBJS)
    <tab\>gcc -o appexam $(OBJS)
  2. 环境变量
    • 在make运行过程中,将环境变量转化为同名同值的make变量。
  3. 预定义变量

    • GNU make预定义了一些变量,在makefile文件中可以直接使用,也可以对这些变量进行重新定义。
    预定义变量名 含义 默认值
    AR 归档程序 ar
    AS 汇编器 as
    CC C语言编译器 cc
    CXX C++编译器 g++
    CPP 带有标准输出的C语言预处理程序 $(CC) -E
    RM 删除文件的命令 rm -r

    例子3:对例子2的代码修改第三行,起到的功能是一样的

    OBJS=main.o app.o mod.o lib.o
    appexam:$(OBJS)
    <tab\>$(CC) -o appexam $(OBJS)
  4. 自动变量

    1. 自动变量由make工具预先定义,具有特定的含义,它的值与规则中的目标和依赖的对象有关。
    变量 功能描述
    $^ 所有的依赖文件,以空格分开,以出现的先后为序
    $< 第一个依赖文件的名称
    $? 所有的依赖文件,以空格分开,它们的修改日期,比目标的创建日期晚
    $* 不包含扩展名的目标文件名称
    $@ 目标的完整名称

    例子4:对例子3的代码修改第三行,起到的功能是一样的

    OBJS=main.o app.o mod.o lib.o
    appexam:$(OBJS)
    <tab\>$(CC) -o $@ $^

猜你喜欢

转载自blog.csdn.net/rainpasttime/article/details/79935524