makefile的作用就是帮助我们便捷的编译。
掌握makefile首先要略懂gcc编译的一些简单指令
gcc的编译选项可以记做 ESc(很像我们的离开键)
1.预处理,生成预编译文件(i.文件):
gcc –E hello.c –o hello.i
2.编译,生成汇编代码(.s文件):
gcc –S hello.i –o hello.s
3.汇编,生成目标文件(.o文件):
gcc –c hello.s –o hello.o
4.链接,生成可执行文件:
gcc hello.o –o hello
如果不想搞这些东西当然也可以一步搞定,什么参数都不加,
gcc -o hello hello.c 或 gcc hello.c -o hello
其实makefile就是让我们把这些东西写到一个文件里,并且你要有自己的逻辑顺序和关系,makefile根据这些逻辑关系决定执行哪些指令。
还是以上面那个例子说明
假设我们还是hello.c文件生成的目标文件是hello,如果使用makefile要这样做:
1.vim Makefile 或 gedit Makefile
2.Makefile中这么写
hello:hello.c
3.make
注意gcc前面是一个tab键,上面两行的意思是,(hello依赖hello.c文件,执行下一行命令)
命令不止可以写一行,如我们在后面再加一行,touch hello(touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件),虽然看起来是和编译毫不相干的命令,但是还是会执行
hello:hello.c #标签:依赖
<tab>gcc hello.c -o hello (tab) 终端要执行的命令(可以有多行)
<tab> touch hello
我们可以看到目录下面多了一个hello文件。
现在我们懂了,makefile第一行 标签:依赖 的意思就是,生成标签 ,查看标签的依赖,如果依赖不是最新,编译该依赖的命令,如果依赖已经是最新,则执行这一个标签下的命令。
如果我们make后面不接参数,则默认第一个标签。
当然,makefile还有许多高级用法,如变量,函数之类,但是不是这里要细讲的内容,总之明白makefile的本质,并且精通gcc的命令,就可以建立一些小的工程。