Makefile学习之路 – 1

通过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后面没有任何目标,就表示生成第一个目标。

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *