Linux Make/Makefile基础知识

Linux Make/Makefile基础知识 一简单了解make/Makefile使用vim Makefile将会成功的建立一个Makefile文件前面的Makefile的M实验小写也可以的但是大多时候前面的M都是使用大写编写好代码保存退出即可直接使用make指令如果没有报错说明没有问题然后直接执行即可如果使用了make clean 指令就是把生成的可执行文件myproc删除myprocmyproc.c 为依赖关系gcc -o myproc myproc.c 为依赖方法第一条表示生成一个myproc的可执行文件需要依赖一个myproc.c文件第二条表示生成上面需要生成一个myproc可执行文件需要依赖这条指令.PHONY 为伪目标clean 为依赖关系rm -rf myproc 为依赖方法第三条为伪目标后面跟的谁表示谁会一直被反复执行(如图 .PHONY:clean 表示clean这一条的依赖关系和依赖方法会一直被反复的重新执行)第四条clean也表示一个依赖关系(依赖关系也可以不依赖任何文件表示依赖了一个空文件意思就是只要执行了clean这个依赖关系clean小面的依赖方法会立即执行)第五条为clean的依赖方法表示执行了clean这个依赖关系将会删除myproc这个可执行文件注意1那个依赖关系在文件的最上面make就是执行哪个依赖关系还有属于它的方法如上图最上面的依赖关系myprocmyproc.c所以使用make指令会默认执行这个关系myprocmyproc.c还有它的依赖方法gcc -o myproc myproc.c意思就是立即生成一个myproc的可执行文件这个谁在最上面的位置是可以人为选择的不是固定的如图现在把两串代码交换位置保存退出将会发现make默认执行的的clean的依赖关系还有它的方法你要使用make创建一个myproc可执行程序需要使用makemyproc(myproc为创建一个可执行文件的依赖关系)注意2为什么一般情况下为什么编译程序不会加一个伪目标让这个编译程反复的程序编译呢如图如果一个文件使用make指令编译成功后为什么接着使用make接着编译的时候它不会编译只会输出 myproc is up to date(myproc已经是最新的不需要编译)这是因为如果你的文件小加不加为目标都无所谓但是如果你的文件很大有上千个甚至上万个全部重新编译反而会浪费很多时间大大的降低了文件的编译效率所有一般编译程序的那里都不会加一个伪目标这里只是单纯的帮原来的东西给了变量然后再通过变量来进行相应的定义$最终的目标文件$^依赖的文件列表这个意思是当前目录下的所有的.o和.c文件全部展开这两个意思是一个意思就是将当前目录下的所有.c文件列出来这个意思是将列出来的所有.c文件变成.o文件二使用make/Makefile其它知识使用这个Makefile文件通过这myproc.c文件代码我们可以简单的制作一个简单的倒计时程序该程序是从9~0也就是倒数10秒编译成功我们运行发现这个程序的特点是每输出一个倒计时就会进行一次换行但是我们想这个代码不会换行需要这个代码在原来的位置进行倒计时我们就不能让这个代码进行换行我们需要的是回车我们就不能在后面使用\n而是使用\r,因为只有\r才能表式回车然后我们把\n换成\r后重新进行程序的编译和输出就会发现换成了/r这个代码就不会一个一个数字的输出只有当这个是最后一个数字结束的时候才会进行输出这是因为这个/r不具备刷新功能\n是具备刷新功能\r因为不具备刷新功能它会把每一个数字方入所谓的输出缓冲区只有当程序结束的时候才会进行输出最后一个数字但是\n就会把每一个数字进行刷新和输出那如果我们使用了\r回车又想立即刷新我们需要怎么做这里我们就要需要知道只要我们使用了printf函数这个系统就会默认打开三个输出流分别是第一个表示键盘的刷新后面两个都是表示屏幕的所以我们只需要使用了\r在\r后面加一条代码 fflush(stdout)就行了通过编译运行我们发现是没有问题的都是如果我们把从9开始倒计时改成从10开始倒计时就会发现第二的数字永远都不会改变发生改变的只有第一个数字第一个数字从1开始然后第二次变成9然后再从9~0那如何改变这种行为呢这个时候我们就要立即显示的规则如果我们需要屏幕输出123456这个数字屏幕是输出直接123456这串数字还是以字符的形式输出如“1”“2”…很明显屏幕是以字符的形式输出然后把它们连在一起了所以大家都觉得是输出123456数字就是如果你使用一个%d进行输出如果这个字符是2本身为02因为只输出一个字符系统就会自动输出后面的字符也就是2所以这里10是字符“1”还有字符“0”如果要它们正常输出就是要把占位符%d,变成%2d就可以了就会发现它变正常了但是好像发现这个0没有左对齐因为可以明显的发现这个0前面有一个空格那如果我们想让它前面没有空格怎么办这里就需要一个左对齐了只需要在%2d前面加 - 就行了就是 -%2d这就是左对齐编译运行发现它是没有一点问题的三使用make/Makefile制作进度条制作前需要建立一些新的文件如图在里面编辑相应的内容如图为Makefile如图为process.h如图为process.c如图为main.c如图把代码编辑好没有问题的话这就是正常编译的结果