2012年(7)
分类: C/C++
2012-01-20 14:35:19
Makefile的编写是Linux下编程的基本功。今天踏踏实实地看了下Makefile,不看还真是不知其中的奥秘。推荐<跟我一起写Makefile>写得很好很详细。
Makefile的规则
target...:prerequisites...
command
…
目标文件:依赖的文件
执行命令
make是用来执行makefile的工具,它是通过检查目标文件是否存在或者依赖的文件是否比目标文件更新来执行的。很基础的就可以这样写
main:main.o
gcc -o main main.o
main.o:main.c abc.h
gcc -c main.c
clean:
rm main.o
命令前面一定要加tab键.
Clean:称为一个标签,不指定依赖文件可以执行相应的命令
make中可以加入变量,make中的变量就是字符串
obj=main.o
然后在出现使用main.o的地方可以直接用$(obj)或${obj}代替
自动推导
当目标是个.o文件时,它会自动把.c加在依赖里并且gcc -c .c也可推出来
main.o:abc.h
等同于
main.o:main.c abc.h
cc -c main.c
main:main.o
cc -o main main.o
其中虽然main.o没有规则,但make可以自动推导出来。
Make会在当前目录找寻文件名为GNUmakefile ,makefile Makefile推荐用Makefile,同时也可自定名称只需make -f 加-f参数 后面为指定的文件名。
在makefile中可以引用其综makefile文件
加include
标签,如果想用一个make生成多个可执行文件,可以利用标签这个特性。
all:prg1 prg2 prg3
prg1:prg1.o utils.o
gcc -o prg1 prg1.o utils.o.....
在make中 ‘#’为注释,当在执行的命令前回‘@’make就不会把命令输出在终端上一般
@echo 正在编译。。
当让上一命令结果应用在下一命令时应该在第一条命令后加‘;’号,然后写同一行第二条命令
如 cd /home/xxx ; xxxx
然后makefile中还有一大堆的东西,什么函数,条件判断 ,高级变量 一些一些的,以后再说了。