通过makefile可以一次性将所有相关的源文件编译生成目标文件.
makefile是通过make命令来执行的. 在windows下面是通过nmake执行的. 这里只讨论前者.
先写一个简单的makefile
#This is my first my makefile
CC=gcc
OBJ=codec.o format.o main.o
EXEC=player
CLEANFILE=$(OBJ) $(EXEC)
$(EXEC): $(OBJ)
$(CC) -o $(EXEC) $(OBJ)
codec.o: codec.c codec.h common.h
$(CC) -c codec.c
format.o: format.c format.h
$(CC) -c format.c
main.o: main.c common.h
$(CC) -c main.c
.PHONY: clean
clean:
-rm -f $(CLEANFILE)
这个makefile的作用就是将format.c format.h codec.c codec.h common.h main.c编译最终得到player.exe这个目标文件.
其中CC, OBJ, EXEC, CLEANFILE是变量, 相当于c语言中宏, 不过访问的时候必须是$()来访问.
把所有的中间文件用OBJ来替代, 一是为了看起来简洁, 另外一个是为了维护方便, 你想如果写成
$(EXEC): format.o codec.o main.o
以后往再加的活如果有些地方加的不一致, 就会出问题.
makefile的格式就是:
tartget: prerequisite
command
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label.
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
这里clean就是一个标签. 这个标签的作用是清除所有的中间文件和可执行程序.
通过make clean来执行. 但是注意在mingw的shell是不可以的. 它不认标签. 在linux内核的操作系统就可以. 另外cygwin也可以.
使用上面的makefile很简单,只要在makefile所在的目录执行
make
就会生成最终的目标 main,makefile中定义的第一个目标是makefile是默认的目标。如果make后面没有任何目标,就表示生成第一个目标。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.