您的位置:首页 > 其它

第一个makefile

2015-07-05 15:24 387 查看
刚刚写出了第一个最简单的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是直接编译连接成可执行文件

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: