gcc和Makefile

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

gcc hello.c -o hello

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的命令,就可以建立一些小的工程。