make和makefile简介:
make:是一个非常重要的编译命令,本质上它是一个程序。利用make工具,可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那样会变的很麻烦。而make工具则可自动完成编译工作,并且可以只对在上次编译后修改过的部分进行编译。
make是一个命令,
makefile是一个文件。
make命令执行时,需要一个 Makefile文件,来告诉make命令需要怎么样的去编译和链接程序。
Makefile来告诉make命令如何编译和链接这几个文件。
我们的规则是:
1.如果这个工程没有编译过,那么我们的所有的文件都要编译并被链接。
2.如果这个工程的某几个文件被修改,那么我们只编译被修改的文件,并链接目标程序。
3.如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的的文件,并链接目标程序。
例如我们编写一个如下简单的test.c文件:
现在我们编写他的Makefile文件:
这样就写完了,我们只需make一下就可以了:
今天我们来用makefile来实现一个简单的小程序(进度条):
我们打印进度条的时候,只打印一次,就是每一次刷新一次,所以这里就有一个缓冲区的问题。
那么什么是缓冲区呢?
我们这里说的缓冲区是标准输入,输出的缓冲区。当我们每次输输出,输入一个字符时,就要找CPU来处理,这样效率就会很低。所以标准输入输出就有一个缓冲区,用来存放数据,主要就是为了提高效率。
缓冲区的分类:全缓冲,行缓冲,无缓冲。
全缓冲:这种缓冲方式要求填满整个缓冲区后才进行I/O系统调用操作。对于磁盘文件的操作通常使用全缓冲的方式访问。
行缓冲:在这种情况下,当在输入和输出中遇到换行符时,标准I/O库函数将会执行系统调用操作。当所操作的流涉及一个终端时(例如标准输入和标准输出),使用行缓冲方式。因为标准I/O库每行的缓冲区长度是固定的,所以只要填满了缓冲区,即使还没有遇到换行符,也会执行I/O系统调用操作。
无缓冲:无缓冲区是指标准I/O库不对字符进行缓存,直接调用系统调用。
在来看看\n和\r:
\n是换行,\r是回车,回车 = 光标到达最左侧,换行 = 移到下一行。
举个例子:
这个程序有\n,所以他会先输出“hello”,然后睡1s。
这个程序会先睡1s,在输出“hello”。
这其实就和上面讲过的缓冲区有关。
因为在C程序中缓冲区的方式是以行缓冲的方式刷新的,也就是说程序要在输入流中获取到一个行结束标志(换行或者是EOF)才会显示在输出屏幕上。
下面是进度条的实现:
下面是编写Makefile文件:
出来make一下,然后./test结果就出来了:
谢谢浏览,有错的地方请指出来,一起改进。