自己写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,就会执行编译。生成我们想要的工程文件。如下图所示
多个文件的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
编译成多个可执行文件的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
以前我总是逃避,我想好好面对余生。