Linux学习-Makefile

Makefile的原理

  • Make是一个工程管理器,Make只编译更新过的文件
  • Makefile是Make的唯一配置文件
    • 有make工具创建的目标体(target),通常是目标文件或者可执行文件
    • 要创建的目标所依赖的文件(dependencey_file)
    • 创建每个目标体时需要运行的命令(command)
    • 使用伪目标使clean总是执行
    • 命令行前面必须是一个”TAB键”,否则编译错误为:***missing separator. Stop

例子

hello.o:hello.c hello.h
    gcc -c hello.c -o hello.o

sunq:kang.o yul.o -o sunq
    gcc kang.o yul.o -o sunq
kang.o:kang.c kang.h
    gcc -Wall -O -g -c kang.c -o kang.o 
yul.o:yul.c
    gcc -Wall -O -g -c yul.c -o yul.o

-Wall:表示允许发出gcc所有有用的报警信息
-c:只是编译不链接,生成目标文件”.o”
-o file:表示把输出文件输出到file里


创建和使用变量

  • 创建变量用来代替

    1. 系列文件的名字
    2. 传递给编译器的参数
    3. 需要运行的程序
    4. 需要查找源代码的目录
    5. 你需要输出信息的目录
    6. 你想要做的其他事情
  • 定义方式

    • VAR=var
    • VAR:=var
  • 变量使用$(VAR)

  • 符号’$’用’$$’表示
  • 类似于编程语言中的宏
  • 用?=定义变量

自动变量:

符号含义
$*不包含扩展名的目标文件名称
$+所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$<第一个依赖文件的名称
$?所有时间戳比目标文件晚的依赖文件,并以空格分开
$@目标文件的完整名称
$^所有不重复的目标依赖文件,以空格分开
$%如果目标是归档成员,则该变量表示目标的归档成员名称

Makefile命令选项及隐含规则

make基础命令:

参数含义
-Cdir读入指定目录下的makefile
-ffile读入当前目录下的file文件作为makefile
-i忽略所有的命令执行错误
-Idir指定被包含的makefile所在目录
-n只打印要执行的命令但不执行这些命令
-P显示make变量数据库和隐含规则
-s在执行命令时不显示命令
-w如果make在执行过程中改变目录,打印当前目录名

隐含规则

  1. 生成.o文件时自动编译.c文件
  2. 执行文件名与其中的某个.o文件名相同时,可以自动生成

VPATH及嵌套的Makefile

VPATH

工程项目中的源文件很可能不在同一个目录下,因此需要指明源文件路径;VPATH可以方便的指明所有引用路径,类似于配置环境变量

VPATH=src1 /home/huhu

嵌套的Makefile

外层makefile控制流程,内层makefile负责编译

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值