首页 > 代码库 > GNU-makefle (二) Makefile 文件名,include,make工作方式

GNU-makefle (二) Makefile 文件名,include,make工作方式

参考链接: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使用的是拖延战术,如果变量出现在依赖关系的规则中,那么仅当这条依赖被决定要使用了,变量才会在其内部展开。


GNU-makefle (二) Makefile 文件名,include,make工作方式