自己写makefile简易教程

自己写makefile简易教程

前言:由于个人精力原因,我只写makefile的内容,C语言以及shell指令又不了解的同学,请先学习C语言以及shell指令。


单个文件的makefile

写单个文件的makefile时,我们需要了解最基本的格式

target:prerequistes...
	command
	...
	...

target:是指生成的项目。

prerequistes:是指生成项目需要的文件。

command:是指运行的命令。

下面是具体例子:

main:main.c
	gcc -o main main.c
clean:				#这是一个清除命令,我们需要在shell中通过调用make clean 命令来实现他。
	rm main

具体的makefile实现需要是需要自己的工程目录下面的,建立一个makefile文件,在该目录下,调用make,就会执行编译。生成我们想要的工程文件。如下图所示

C4996

多个文件的makefile

当我们需要编译多个c文件时,我们就需要把其它c文件编译成.o文件,最后再编译成main文件。

main:main.c tool.o
	gcc main.c tool.o -o main
tool.o:tool.c
	gcc -c tool.c
clean:
	rm *.o main

tool.o:tool.c 表示tool.o项目以来的文件是tool.c,使用的命令是gcc -c tool.c

clean:项目下的命令rm *.o main*.o的含义是所有的.o文件

运行make时,是先运行gcc -c tool.c,再运行gcc main.c tool.o -o main

C496

编译成多个可执行文件的makefile

CC=gcc
FLAGS=-lm -Wall -g

all:main_max main_min

main_max:main_max.c max.o
	$(CC) $(FLAGS) main_max.c max.o -o main_max

main_min:main_min.c min.o
	$(CC) $(FLAGS) main_min.c min.o -o main_min

max.o:max.c
	$(CC) $(FLAGS) -c max.c
min.o:min.c
	$(CC) $(FLAGS) -c min.c
	
clean:
	rm *.o main_min main_max

在这里呢,就出现了两条新的命令

CC=gcc
FLAGS=-lm -Wall -g

在下面调用是这样的

$(CC) $(FLAGS) -c min.c

CC=gcc表示编译器为gcc,FLAGS=-ml -Wall -g是特定的链接指令,类似c语言中的宏的使用。

使用时,直接是$()去替换掉对应的命令即可。就像这样

$(CC) $(FLAGS) -c min.c

原文地址:https://www.cnblogs.com/zhouhaocheng---yijianqinxin/p/12651636.html