实例学习写Makefile文件

简介:

目录

  0. 扫盲
1. 编译,链接
2. Makefile文件执行
3. Makefile书写规则 
4. 案例
5. Makefile是如何工作的
6. 拔高,参考

 

0. 扫盲

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员(是不是夸张了点,别人说的)。   

什么是makefile文件?它是一个指挥文件,指挥着源文件编译的先后顺序,以及如何链接在一起。

 

1. 编译,链接

 

2. Makefile文件执行

写好Makefile(或写成makefile)文件后,直接执行命令make,编译器会自动执行makefile里的命令,进行编译、链接知道生成最终可以执行的文件。即

make

 

3. Makefile书写规则

target : objects
    command

其中

  • target是可以是目标文件(.o)也可以是可执行文件,还可以是个标签(最后说)
  • objects是生成target依赖的文件
  • command是make要执行的文件(可以是任意Shell命令)
  • 特殊字符@@:目标文件,^:所有的依赖文件,$<:第一个依赖文件

 

4. 案例

假设文件的关系如下图

 

写法1

复制代码
main2 : main2.o sum.o hello.o
    g++ -o main2  main2.o sum.o hello.o
main2.o : main2.cc sum.h
    g++ -c main2.cc
sum.o : sum.cc sum.h hello.h
    g++ -c sum.cc
hello.o : hello.cc hello.h
    g++ -c hello.cc
复制代码

参数 -o 后面是可执文件; -c后面是待编译的文件。在前两行中写了很多重复的.o文件,可以把它集合起来,用变量表示,如下:

 

写法2

复制代码
objects = main2.o sum.o hello.o
main2 : $(objects)
    g++ -o main2 $(objects)

main2.o : main2.cc sum.h
    g++ -c main2.cc
sum.o : sum.cc sum.h hello.h
    g++ -c sum.cc
hello.o : hello.cc hello.h
    g++ -c hello.cc
复制代码

GUN的make相当强大,它可以自动推导文件集文件依赖关系,写法如下:

 

写法3

复制代码
objects = main2.o sum.o hello.o
main2 : $(objects)
    g++ -o main2 $(objects)

main2.o : sum.h
sum.o : sum.h hello.h
hello.o : hello.h
复制代码

文件执行完了以后生成很多.o文件,能不能可以删除掉,可以的,写上命令(例如clean),下面是执行的操作,例如:

 

写法4

复制代码
objects = main2.o sum.o hello.o
main2 : $(objects)
    g++ -o main2 $(objects)

main2.o : sum.h
sum.o : sum.h hello.h
hello.o : hello.h

clean:
    rm *.o
复制代码

这样执行 make clean,就会执行rm *.o 删除所有的.o文件,即

make clean

 

5. Makefile如何工作的?

  1. 输入make后,会在目录找Makefile、makefile
  2. 如果找到,它会在文件中找到第一个目标文件(例子中的main2)作为最终的目标文件
  3. 如果main2不存在,就依靠后边的.o文件生成
  4. 如果后边的.o不存在,就利用下边的g++ -c 生成
  5. .o文件都够了,就链接生成最终的目标文件

 

6. 拔高,参考

跟我一起写Makefile-陈皓






本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3667634.html,如需转载请自行联系原作者

相关文章
|
6月前
|
C语言
Makefile教程(Makefile的结构)
Makefile教程(Makefile的结构)
42 0
|
3月前
好用的 自定义Makefile文件
好用的 自定义Makefile文件
13 0
|
5月前
|
Shell
如何使用makefile
如何使用makefile
|
Shell Linux 开发工具
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(一)
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界
350 0
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(一)
|
NoSQL Shell Linux
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(三)
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界
205 0
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(三)
|
自然语言处理 算法 NoSQL
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(二)
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界
153 0
【六、深度解析Makefile】工程文件编译链接的“规则制定者”:带你走进 makefile 的世界(二)
|
编译器 Shell C语言
Makefile文件 | 进阶指南
Makefile文件 | 进阶指南
295 0
|
Shell Linux C语言
Makefile文件 | 编写指南
Makefile文件 | 编写指南
296 0
|
小程序 C语言
玩转Makefile | 一次编译多个目标
玩转Makefile | 一次编译多个目标
479 0
玩转Makefile | 一次编译多个目标

热门文章

最新文章