makefile最简单的实例

网上有不少makefile的例子,然而都晦涩难懂,有些则过于冗长,不适合新手初步掌握makefile的用法。

实际上,makefile的作用就是帮助我们便捷的编译。

掌握makefile首先要略懂gcc编译的一些简单指令

gcc的编译选项可以记做          ESCL(很像我们的离开键)

第一步是-E

例如 gcc -E 1.c      这一步的意思是预编译,假设我们有个1.c文件,打印helloworld,我们在头部加入include

那么这一步就会生成一个.i文件,把stdio.h中的内容拷过来

第二步是-S

例如 gcc -S 1.i      这一步把我们上一步生成的1.i文件生成一个1.s文件,这一步叫做编译,可以把他.1文件生成为汇编代码,

第三部是-C

例如 gcc -C 1.s      这一步就是把上一步生成的1.s文件生成一个1.o文件,这一步叫做汇编,可以把.s文件生成为2进制代码。

我们的1.c文件到这就已经能用了,在终端中./1.c就可以看到helloworld

最后一步是gcc -L 1.o 这一步是把我们的二进制文件链接起来,假设我们有两个二进制文件产生,那么就需要用到这个参数,把两个二进制文件链接,当然我们这里只是打印helloworld所以不需要这么做,

如果不想搞这些东西当然也可以一步搞定,什么参数都不加,

直接gcc 1.c -o filename


讲这么多好像和makefile无关的东西

其实makefile就是让我们把这些东西写到一个文件里,并且你要有自己的逻辑顺序和关系,makefile根据这些逻辑关系决定执行哪些指令。

还是以上面那个例子说明

假设我们还是1.c文件生成的目标文件是file那么在makefile中就要这样写

file:1.c

     gcc 1.c -o file

注意gcc前面是一个tab键,上面两行的意思是,(file依赖1.c文件,执行下一行命令)

命令不止可以写一行,如我们在后面再加一行,touch hello,虽然看起来是和编译毫不相干的命令,但是还是会执行

flag : 1.c                              #标签:依赖

     gcc 1.c -o flag                     (tab) 终端要执行的命令(可以有多行)    

     touch hello

我们可以看到目录下面多了一个hello文件。

现在我们懂了,makefile的意思就是,make flag ,查看flag的标签的依赖,如果依赖不是最新,编译该依赖的命令,如果依赖已经是最新,则执行这一个标签下的命令。

如果我们make后面不接参数,则默认第一个标签。

当然,makefile还有许多高级用法,如变量,函数之类,但是不是这里要细讲的内容,总之明白makefile的本质,并且精通gcc的命令,就可以建立一些小的工程。

你可能感兴趣的:(c语言,linux)