博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Makefile开发工具学习小结
阅读量:2517 次
发布时间:2019-05-11

本文共 1516 字,大约阅读时间需要 5 分钟。

make命令与Makefile文件

1、 目的:解决大型程序编译多个源文件带来的问题,可以大大提高开发效率。

2、 Makefile文件主要告诉应用程序应该如何构造,一般与其他源文件放在同一目录。一个大的工程,可以用多个不同的makefile文件分别管理项目不同部分。
3、 Makefile语法:由一组依赖关系和规则组成
1) 每个依赖关系由一个目标和一组该目标所依赖的源文件组成。在makefile文件中,依赖的写法是:目标名称:(空格或tab)文件列表,
myapp: main.o 2.o (myapp为目标,依赖main.o 2.o)
这些依赖关系形成一个层次结构,显示了源文件之间的关系。
2) 规则描述了通过这些依赖文件创建目标,它定义了目标的创建方式。
例如
myapp: main.o 2.o (依赖关系)
gcc -o myapp main.o 2.o (规则)
4、 Makefile命令参数
1)-k:让makefile在发现错误后仍然继续执行,而不会停下来。可以利用此参数一次发现所有编译错误;
2)-n:让makefile输出将要执行的操作步骤,而不是真正去执行;
3)-f :告诉make命令将哪个文件作为makefile文件,默认会查找当前目录下的makefile和Makefile文件(makefile优先查找)
5、一个简单的makefile文件
在同一目录下创建:
Makefile:

helloapp: hello.o                                  (helloapp的依赖关系)           gcc -o helloapp hello.o            (生成hello.o的规则)hello.o: hello.c           gcc -c hello.c

hello.c:

#include 
int main(){ printf("this is a Makefile test!\n"); return 0;}

执行过程:

# makegcc -c hello.cgcc -o helloapp hello.o# ./helloappthis is a Makefile test!

6、 Makefile的注释:注释以#号开头,一直延续到这一行的结束。

7、 Makefile的宏:可以很好的设置环境变量,移植性好。
定义宏:MACRONAME=value
使用宏:$(MACRONAME)
默认宏:

  • $? 当前目标所依赖的文件列表中比当前目标还要新的文件
  • $@ 当前目标名称
  • $< 当前依赖文件名称
  • $* 不包括后缀名的当前依赖文件的名称

8、 Makefile的clean和install

1) clean:用于删除不需要的目标文件
rm命令以-开头,减号的含义是让make命令忽略rm命令的执行结果,即即使目标文件不存在,也不会因为rm命令执行失败而返回错误。
格式:
clean:
-rm hello.o
2)install:用于将编译成功的应用程序安装
用于制作install目标的规则由几个shell脚本命令组成。由于make命令在执行规则时会调用一个shell,并且会针对每个规则使用一个新的shell,所以必须在上面每行代码结尾加上反斜杠\,让所有shell脚本命令处于逻辑上同一行;并且命令以@开头,表示make在执行这些规则之前不会在标准输出上显示命令本身。
install:
chmod u+x helloapp
./helloapp

上面将生成的可执行文件,直接执行。

这里写图片描述

你可能感兴趣的文章
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
已知子网掩码,确定ip地址范围
查看>>
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Docker(一)使用阿里云容器镜像服务
查看>>
Docker(三) 构建镜像
查看>>
FFmpeg 是如何实现多态的?
查看>>
FFmpeg 源码分析 - avcodec_send_packet 和 avcodec_receive_frame
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>