赞
踩
在Windows环境下通过虚拟机软件(我用的是VMware)安装Ubuntu 18.04 Desktop,并通过Vim编写C语言,再用gcc和makefile分别编译,并作出区别解析。
程序说明:编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。
开始ubuntu操作:
首先调到code文件工作目录下,并用vim创建一个sub1.h头文件(vim编辑器不会用的,可以到菜鸟教程中学习)。
编写sub1.h头文件的程序,进行函数申明。
编写sub1.c文件,实现函数x2x()。
编写main1.c文件,调用函数x2x()。
生成main1.c、sub1.h、sub1.c文件。
到这里,准备工作就做好了,就可以开始编译这些文件了。
首先将sub1.c文件用gcc编译成目标文件sub1.o;
再将main1.c文件用gcc编译成目标文件main1.c;
再将两个目标文件编译成一个可执行文件;
最后执行文件,打印结果。
从这我们可以看出,如果将两个.c文件编译成可执行文件,需要进行三步,倘若其中一个文件更改了,又要删除原目标文件和可执行文件并重新编译C文件,如果文件过多的话,可想而知,两个字——麻烦!!!
首先删除之前编译后的.o文件和可执行文件all;
再用vim创建makefile文件。
makefile文件的格式:
第1行:all可以看做是目标文件(注意:不要将与目标文件.o混淆),是通过依赖文件main1.o和sub1.o得到的;
第2行:设定了第1行的编译规则(用gcc编译main1.o和sub1.o得到可执行文件all);
第3行:main1.o可以看做是目标文件,是通过依赖文件main1.c得到的;
第4行:设定了第3行的编译规则(用gcc编译main1.c得到main1.o文件,完整的格式是:gcc -c main1.c -o main1.o。这里缺省了);
第5行:sub1.o可以看做是目标文件,是通过依赖文件sub1.c得到的;
第6行:设定了第5行的编译规则。
整个makefile文件的逻辑顺序是自下而上,从.c文件到可执行文件。
直接敲命令:make
即可编译所有的.c文件并生成可执行文件all,再输出结果。
这时,如果我们修改其中一个.c文件,比如main1.从文件,将传递的参数2和3修改为3和3再来用make命令编译一下。
这时,只编译了修改后的main1.c文件,没有编译sub1.c文件,并生成了新的可执行文件all。
单独用gcc编译所有的C文件要麻烦得多,而用makefile编译所有的C文件明显要方便得多,只需要make一个命令,就可以编译所有的C文件,即使修改了部分C文件,也只会编译修改了的C文件,减少了编译的时间,多推荐大家使用makefile,语法也不难。
如果有帮到您的地方,不胜荣幸,本文章属于原创,如果转载或引用请附带链接,谢谢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。