网站建设基础教学设计,天津有哪些互联网公司,济南做外贸的网站公司吗,国内免备案云主机背景 会不会写makefile#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数#xff0c;其按类型、功能、模块分别放在若干个目录中#xff0c;makefile定义了一系列的规则来指定#xff0c;哪些文件需要先编译#xff0c;哪些文件需要后…背景 会不会写makefile从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新编译甚至于进行更复杂的功能操作makefile带来的好处就是——“自动化编译”一旦写好只需要一个make命令整个工程完全自动编译极大的提高了软件开发的效率。make是一个命令工具是一个解释makefile中指令的命令工具一般来说大多数的IDE都有这个命令比如Delphi的makeVisual C的nmakeLinux下GNU的make。可见makefile都成为了一种在工程方面的编译方法。make是一条命令makefile是一个文件两个搭配使用完成项目自动化构建。 理解
创建一个test.c文件并写入内容。 创建一个makefile文件并写入一些如下内容 我们可以尝试使用make命令了 make后如果不跟内容的话默认是从第一句指令开始执行到.PHONY结束 我们也可以执行指令进行清除 实例代码
c代码 #include stdio.h int main() { printf(hello Makefile!\n); return 0; } makefile文件 test.exe:test.o gcc test.o -o test.exe test.o:test.s gcc -c test.s -o test.o test.s:test.i gcc -S test.i -o test.s test.i:test.c gcc -E test.c -o test.i .PHONY:clean clean: rm -f test.i test.o test.s test.exe 依赖关系
上面的文件 test.exe,它依赖 test.o test.o, 它依赖 test.s test.s , 它依赖 test.i test.i , 它依赖 test.c
依赖方法 gcc test.* -option test.* ,就是与之对应的依赖关系
原理 make是如何工作的,在默认的方式下也就是我们只输入make命令。那么 1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2. 如果找到它会找文件中的第一个目标文件target在上面的例子中他会找到“test.exe”这个文件并把这个文件作为最终的目标文件。 3. 如果test.exe文件不存在或是test.exe所依赖的后面的test.o文件的文件修改时间要比test.exe这个文件新可以用 touch 测试那么他就会执行后面所定义的命令来生成test.exe这个文件。 4. 如果test.exe所依赖的test.o文件不存在那么make会在当前文件中找目标为hello.o文件的依赖性如果找到则再根据那一个规则生成test.o文件。这有点像一个堆栈的过程 5. 当然你的C文件和H文件是存在的啦于是make会生成 test.o 文件然后再用 test.o 文件声明make的终极任务也就是执行文件test.exe了。 6. 这就是整个make的依赖性make会一层又一层地去找文件的依赖关系直到最终编译出第一个目标文件。 7. 在找寻的过程中如果出现错误比如最后被依赖的文件找不到那么make就会直接退出并报错 而对于所定义的命令的错误或是编译不成功make根本不理。 8. make只管文件的依赖性即如果在我找了依赖关系之后冒号后面的文件还是不在那么对不起我就不工作啦 项目清理 工程是需要被清理的像clean这种没有被第一个目标文件直接或间接关联那么它后面所定义的命令将不会被自动执行不过我们可以显示要make执行。即命令——“make clean”以此来清除所有的目标文件以便重编译。但是一般我们这种clean的目标文件我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是总是被执行的。可以将我们的 test.exe目标文件声明成伪目标测试一下 该工具的实例应用 -- 进度条
补充知识\r \n
回车概念 我们知道我们的外设键盘上总有一个Enter尤其是老式键盘总会是 先向下再向左其实就是先进行换行然后再从这一行的起始位置开始。即先\r (来到这一行的起始位置)后\n换行
换行概念 \n:进行换行操作。
补充知识 行缓冲区 我们在c语言应该了解过一些缓冲区的概念我们在写入内容的时候通常是先读到缓冲区然后在从缓冲区加载到屏幕但这个加载是缓慢的如果我们使用\n可能就瞬间显示我们要打印的\n之前的内容。
进度条代码
int main()
{
int i 0;
char bar[102];
memset(bar, 0 ,sizeof(bar));
const char *lable|/-\\;
while(i 100 ){
printf([%-100s][%d%%][%c]\r, bar, i, lable[i%4]);
fflush(stdout);
bar[i] #;
usleep(10000);
}
printf(\n);
return 0;
}