Makefile编写学习摘要

windows的.lib跟Unix的.a一样,属于中间级。

.o跟Windows的对象一样,是编译后的文件,需要连接起来(LINK),之后才是可执行文件。

clean:一般是make clean ,删除中间的目标文件,.o之类。可以叫别的名字,指示动作用,可以自己定义操作,打包make uImage意思应该就是makefile下定义了一个叫uImage的?

edit : main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
##反斜杠(/)是换行符的意思
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
...
utils.o : utils.c defs.h
cc -c utils.c

clean :
rm edit main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o

以上代码也可以称为Makefile,写起来麻烦但是清楚,对于工程小不想装13的可以直接这么写。

如果,突然想加个新的.o,凡是与其相关,都必须要补上对应关系的.o,漏了就make失败,为了方便Makefile的修改工作,有了Makefile的变量(类似C中的宏),叫OBJ,obj,objs,objects...之类。。。(好像没啥区别)

objects = main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
........
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit $(objects)

然后,make识别XX.o的依赖文件就是XX.c,(.o & .h)再一起被make自动推倒(导),将其收拢起来,变得更加简洁。于是:

objects = main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o

edit : $(objects)
cc -o edit $(objects)

$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h
##.PHONY意思表示clean是一个“伪目标”,。而在rm命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。
.PHONY : clean
clean :
-rm edit $(objects)

要指定特定的Makefile,你可以使用make的“-f”和“--file”参数,如:make -f Make.Linux或make --file ARMakefile

引用makefile 使用 include <filename>

1、如果make执行时,有“-I”或“--include-dir”参数,那么make就会在这个参数所指定的目录下去寻找。
2、如果目录<prefix>/include(一般是:/usr/local/bin或/usr/include)存在的话,make也会去找。

//引用自http://blog.csdn.net/liang13664759/article/details/1771246

原文地址:https://www.cnblogs.com/Viewsky/p/4432649.html