什么是makefile呢?

一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为
makefile就像一个Shell脚本一样,也可以执行操作系统的命令。

接下来用几个简单的小例子为大家介绍简单的makefile使用

例子1:

main: main.c
gcc main.c -o main

其中,main为目标生成文件,main.c为依赖文件

例子2:

main: main.c hello.o
gcc main.c hello.o -o main
hello.o: hello.c
gcc -c hello.c clean :
rm -fr *.o main

其中,gcc min.c : gcc编译器会对源文件min.c进行预处理, 编译, 以及链接, 最后生成可执行文件, 默认为a.out

gcc -c min.c: gcc编译器会对源文件min.c进行预处理, 编译, 不进行链接, 最后生成的是object file (目标文件), 此处为min.o, 这属于编译过程的中间阶段, 再经过链接, 才能最终生成可执行文件.

注意:makefile都是从上往下看依赖条件进行的,比如目标文件main依赖的是main.c和

hello.o,然后hello.o依赖hello.c,执行gcc -c hello.c后生成hello.o。

例子3:



CC = gcc
CFLAGS = -c -Wall -g
OBJS = main.c hello.o helloo.o
all: main
main: $(OBJS)
$(CC) $^ -o $@
%.o: %.c
$(CC) $^ $(CFLAGS) -o $@
clean :
rm -fr *.o main

说明:执行make clean命令,可删除当前目录下所有的.o文件以及main

CC、CFLAGS、OBJS相当于定义一个变量名来代替后面的变量值

all表示可执行所有目标文件

all : hello another

hello : hello.c
gcc -o $@ $< another : another.c
gcc -o $@ $<

$^ = 上一句依赖关系当中被依赖的文件

$@=目标名

% =通配符(代表相同的名字)

好了,今天的分享就到此为止了,谢谢观看!

最新文章

  1. 解决IE8 内置JSON.stringify,中文变unicode的问题
  2. DOM事件探秘
  3. ios crash 日志分析
  4. hdu1017
  5. C++ VARIANT 学习小记录
  6. How to solve GM MDI cannot complete the installation
  7. CSS Reset方法
  8. fetch()的用法
  9. iOS中 常用的mac终端指令汇总 技术分享
  10. Unity AssetBundle的生成、加载和热更新
  11. Sudoku POJ - 2676(DLX)
  12. [转]kaldi中的在线识别----Online Recognizers
  13. Leetcode 999. 车的可用捕获量
  14. tcp ,http .udp
  15. Webpack基础入门学习笔记
  16. DES c#加密后java解密
  17. MYSQL统计
  18. Liunx expect 基础
  19. 「Linux」centos7更新python3.6后yum报错问题
  20. HttpURLConnection传json

热门文章

  1. FL Studio乐理教程之和弦进行
  2. ntfs和fat32的区别
  3. Docker-maven-plugin + Dockerfile + Arthas实现应用诊断
  4. leetcode 33和 leetcode81
  5. HDU4632 Palindrome subsequence
  6. iOS中如何使定时器NSTimer不受UIScrollView滑动所影响
  7. Clickhouse 入门
  8. Pytest自动化测试 - allure报告进阶
  9. C语言--计算代码段运行时间
  10. 《高并发下的.NET》第2季 - 故障公告:高并发下全线崩溃