第一个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了。
只有两个.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是直接编译连接成可执行文件
在默认的方式下,也就是我们只输入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是直接编译连接成可执行文件
相关文章推荐
- AngularJs自定义指令详解(9) - terminal
- 开源C/C++网络库比较 ace &&bosst
- android编程之代码布局(一)
- tiny4412 UART for C printf Demo
- IE6设置select标签高度兼容性问题
- iOS-地图标注(大头针)
- 1606 - Amphiphilic Carbon Molecules(极角排序)
- 驱动模块和桩模块的概念和区别
- MongoDb gridfs-ngnix文件存储方案
- Android应用程序消息处理机制笔记
- C语言SQLite3基本操作Demo
- 【WPF】两则动画效果
- runat="server"
- MSSQL - 存储过程事物
- Linux C single linked for any data type
- 对web标准的理解
- 浅谈初始学习安卓应用开发课程的感受
- java web文件上传-spring web MVC
- 安卓控件显示效果小结
- partial类修饰符