参考链接:http://blog.csdn.net/haoel/article/details/2888
文件名
make [-f|--file] [filename] 如: make -f mk1 mk1含有一个makefile的定义。
include关键字
类似C语言的效果。将被包含的文件的内容原样放置在当前位置。
include a b c d e ... abcde为文件名,以空格或tab隔开。 注意:include之前不要用tab,tab表示这是个命令,会在shell中执行。
就好像C/C++的#include指令一样。如果文件都没有指定绝对路径或是相对路径的话,make会在当前目录下首先寻找,如果当前目录下没有找到,那么,make还会在下面的几个目录下找:
1、如果make执行时,有“-I”或“--include-dir”参数,那么make就会在这个参数所指定的目录下去寻找。
make -I . 指定在当前目录寻找
2、如果目录<prefix>/include(一般是:/usr/local/bin或/usr/include)存在的话,make也会去找。
这种方式一般也不会用吧。外部的总是控制比较麻烦的。
3、-include filename 在前面加-表示忽略错误,如文件不存在,也不会进行提示,直接忽略了
makefile例:
#include 关键字, 使用变量来包含。 #include a.mkf mymk = a.mkf -include $(mymk) edit : $(objs) cc -o edit $(objs) main.o: kbd.o: command.o: display.o: insert.o: search.o: utils.o: files.o: .PHONY : clean clean : -rm edit $(objs)
a.mkf
objs = main.o kbd.o command.o display.o insert.o search.o files.o utils.o
make的工作方式:
GNU的make工作时的执行步骤入下:(想来其它的make也是类似)
1、读入所有的Makefile。
2、读入被include的其它Makefile。
3、初始化文件中的变量。
4、推导隐晦规则,并分析所有规则。
5、为所有的目标文件创建依赖关系链。
6、根据依赖关系,决定哪些目标要重新生成。
7、执行生成命令。
1-5步为第一个阶段,6-7为第二个阶段。第一个阶段中,如果定义的变量被使用了,那么,make会把其展开在使用的位置。但make并不会完全马上展开,make使用的是拖延战术,如果变量出现在依赖关系的规则中,那么仅当这条依赖被决定要使用了,变量才会在其内部展开。