第一个makefile

简介:

刚刚写出了第一个最简单的makefile,更深刻的理解了Linux下make和编译链接的原理,例子很简单

在默认的方式下,也就是我们只输入make命令。那么,
1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。
3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。
4、如果edit所依赖的.o文件也不存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程)
5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。

edit : main.o MakeAdd.o
	cc -o edit main.o MakeAdd.o

main.o : main.c makeAdd.h
	cc -c main.c
MakeAdd.o : MakeAdd.c
	cc -c MakeAdd.c
clean :
	rm edit main.o MakeAdd.o

只有两个.c文件,1个头文件,只是完成一个add操作。


-g为了调试用的 
加个-g 是为了gdb 用,不然gdb用不到

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
一般语法:
gcc filename.c -o filename
上面的意思是如果你不打 -o filename 那么默认就是输出filemame.out.这个-o就是用来控制输出文件的。 

-c 只编译不链接


(编辑器编辑源代码,如使用工具notepad,gedit,vi...xxx.c,文本格式)——(编译器编译)分两步——先用汇编器汇编(xxx.s)——然后才进一步生成目标文件(xxx.o)——目标文件(xxx.o,二进制格式但未连接)——连接器连接(二进制可执行,如xxx.exe....)——加载器(变成一个或若干个能RUN的进程)


但是有几个注意点:

1、注意生成目标的重命名,如果cc -c MakeAdd.c没有重命名,就不要使用其他名称【使用-o可以重命名   cc -o Haha.o -c MakeAdd.c】

2、注意在命令前面是TAB键

3、-c是编译成目标二进制文件,不加-c是直接编译连接成可执行文件


相关文章
|
1月前
|
Shell
Makefile函数的使用(1)
Makefile函数的使用(1)
10 0
|
1月前
|
算法 开发者
【Makefile 相关 】Makefile中patsubst(扩展通配符)的含义
【Makefile 相关 】Makefile中patsubst(扩展通配符)的含义
21 0
|
27天前
|
Linux C语言
make:***没有指明目标并且找不到makefile。停止。
make:***没有指明目标并且找不到makefile。停止。
77 0
|
1月前
Makefile中.PHONY的含义
Makefile中.PHONY的含义
16 0
|
1月前
Makefile中.SUFFIXES的含义
Makefile中.SUFFIXES的含义
15 0
|
编译器 C语言 C++
Makefile中常见的gcc编译参数
Makefile中常见的gcc编译参数
335 0
|
C语言 C++
第一个C程序
第一个C程序
89 0
第一个C程序

热门文章

最新文章