Makefile的学习

gkh 发布于 2020-08-03 21019 次阅读


在linux下没有完整地ide,就需要开始关注编译本身了。Linux下的编译主要通过vim配合gcc来编译,编译过程通过make来操控。所以就开始从零开始学习一下如何使用Makefile。
假设只有一个文件 main.c 那么编译很简单,直接命令行即可。
然后如果增加了新的文件并且多次编译还是写成文档自动执行比较舒服。
1、最简单情况 如果只有一个main文件 里面只有main函数。
那就只需要编译最简单的

includes=  main.o
test:$(includes)
    cc -o test $(includes)
main.o : main.c
    cc -c main.c
.PHONY :clean
clean:
    rm test $(includes)

includes 定义需要编译的链接文件,如果需要增加新的在这一处增加即可。
下面的cc 是指调用gcc来编译c文件 .PHONY是伪目标。此时用make即可编译出test可执行文件,即如果有个文件叫做clean,可以保证不冲突。
2、稍微复杂点 假设我们的目录长这个样子
.
├── good
│   ├── good.c
│   └── good.h
├── main.c
└── Makefile
main函数需要调用good文件下的good函数,此时就需要有子目录的问题Makefile有个保留参数VPATH可以定义查找文件的路径 ,而且Makefile可以自主查找需要编译的文件所以 -cc是可以省略的故增加后的文件为

VPATH = good
includes= good.o main.o 
test:$(includes)
	cc -o test $(includes)
main.o : 
good.o : good.h
.PHONY :clean
clean:
	rm test $(includes)

此时还要注意,main文件里引用头文件时需要注意加上路径

#include "good/good.h"

3、再复杂点
├── bad
│   ├── bad.c
│   └── bad.h
├── good
│   ├── good.c
│   └── good.h
├── main.c
├── Makefile
└── test
假设结构是这样的,但是bad.c有good()函数的引用,此时Makefile函数还是照常写,但是需要注意头文件路径需要

#include "../good/good.h"

这样即可。

此作者没有提供个人介绍。
最后更新于 2020-08-03