MAKEFILE学习视频地址:https://www.bilibili.com/video/BV1Xt4y1h7rH/?p=2&vd_source=305f791c703672cea3129189ddda734f

目标:一般指要编译的目标,也可以是一个动作

依赖:指执行当前目标所要依赖的选项,包括其它目标,某个具体文件或库等一个目标可以有多个依赖

命令:该目标下要执行的具体命令,可以没有,也可以有多条。多条时,每条命令一行

3:gcc/g++编译流程详解

gcc –lstdc++ main.cpp:直接从源代码到目标可执行文件了

把过程拆分

预处理:gcc –E main.cpp>main.ii

编译: gcc –S main.ii得到名为main.s的汇编文件

汇编: gcc –c main.s得到名为main.o(.obj)的二进制文件

链接: gcc –lstdc++ main.o 得到名为a.out的可执行文件

3:Makefile中的变量

系统变量:

$* 不包括扩展名的目标文件名称

$+ 所有依赖文件,以空格分隔

$< 表示规则中的第一个条件

$? 所有时间戳(NWYA)比目标文件晚的依赖文件,以空格分隔

$@ 目标文件的完整名称

$^ 所有不重复的依赖文件,以空格分隔

$% 如果目标是归档成员,则该变量表示目标的归档成员名称

系统常量:(可用make –p查看)

AS 汇编程序的名称,默认为as

CC C编译器名称,默认为cc

CPP C预编译器名称,默认为cc –E

CXX C++编译器名称,默认为g++

RM 文件删除程序别名,默认为rm –f

自定义定量

定义:变量名=变量值

使用:$(变量名)/${变量名}

4:Makefile中的伪目标和模式匹配

伪目标 .PHONY:clean

声明目标为伪目标之后,makefile将不会判断目标是否存在或该目标是否需要更新

%.o:%.cpp .o依赖于对应的.cpp

Wildcard $(wildcard ./*.cpp)获取当前目录下所有的.cpp文件

Patsubst $(patsubst %.cpp,%.o,./*.cpp)将对应的cpp文件名替换成.o文件名

5:Makefile运行流程

保证目标是用最新的依赖生成的

第一次完全编译,后面只编译最新的代码(部分编译)

原文地址:http://www.cnblogs.com/gaoyuxia/p/16810810.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性