网站推广公司经理职责,代做网页设计平台,建官网公司,网页开发用什么编程语言一、gcc 的缺点
gcc -o test a.c b.c我们具体分析#xff1a;gcc -o test a.c b.c这条命令 它们要经过下面几个步骤#xff1a;
1#xff09;对于a.c#xff1a;执行#xff1a;预处理 编译 汇编 的过程#xff0c;a.c xxx.s xxx.o 文件。2#xff09;对于b.c…一、gcc 的缺点
gcc -o test a.c b.c我们具体分析gcc -o test a.c b.c这条命令 它们要经过下面几个步骤
1对于a.c执行预处理 编译 汇编 的过程a.c xxx.s xxx.o 文件。2对于b.c执行预处理 编译 汇编 的过程b.c yyy.s yyy.o 文件。3最后xxx.o和yyy.o链接在一起得到一个test应用程序。
提示gcc -o test a.c b.c -v 加上一个**‘-v’**选项可以看到它们的处理过程。
第一次编译 a.c 得到 xxx.o 文件这是很合乎情理的 执行完第一次之后如果修改 a.c 又再次执行gcc -o test a.c b.cb.c 又会重新编译一次这完全没有必要b.c 根本没有修改直接使用第一次生成的 yyy.o 文件就可以了。
缺点对所有的文件都会再处理一次即使 b.c 没有经过修改b.c 也会重新编译一次当文件比较少时这没有没有什么问题当文件非常多的时候就会带来非常多的效率问题如果文件非常多的时候我们只是修改了一个文件所用的文件就会重新处理一次编译的时候就会等待很长时间。
对于这些源文件我们应该分别处理执行预处理 编译 汇编先分别编译它们最后再把它们链接在一次比如
编译
gcc -o a.o a.c
gcc -o b.o b.c链接
gcc -o test a.o b.o比如上面的例子当我们修改a.c之后,a.c会重现编译然后再把它们链接在一起就可以了。b.c 就不需要重新编译。 二、Makefile的引入及规则
makefie最基本的语法是规则规则
目标 : 依赖1 依赖2 ...
[TAB]命令当“依赖”比“目标”新执行它们下面的命令。我们要把上面三个命令写成makefile规则如下
//test是目标它依赖于a.o b.o文件一旦a.o或者b.o比test新的时候
//就需要执行下面的命令重新生成test可执行程序。
test a.o b.o gcc -o test a.o b.o//a.o依赖于a.c当a.c更加新的话执行下面的命令来生成a.o
a.o : a.c gcc -c -o a.o a.c//b.o依赖于b.c,当b.c更加新的话执行下面的命令来生成b.o
b.o : b.c gcc -c -o b.o b.c以 a.o和a.c 来举例分为两种情况
如果目标文件a.o还不存在那么a.o.time 0 a.c.time 说明a.c比a.o新会执行
gcc -c -o a.o a.c如果目标文件 a.o 和 依赖文件a.c 都存在此时却重新修改了a.c。那么a.o.time a.c.time 说明a.c比a.o新就会执行
gcc -c -o a.o a.c优点 如果修改a.c 我们再次执行make它的本意是想生成第一个目标test应用程序,它需要先生成a.o,发现a.o依赖a.c(执行我们修改了a.c)发现a.c比a.o更加新就会执行 gcc -c -o a.o a.c命令来生成a.o文件。b.o依赖b.c发现b.c并没有修改就不会执行gcc -c -o b.o b.c来重新生成b.o文件。现在a.o b.o都有了其中的a.o比test更加新就会执行 gcc -o test a.ob.o 来重新链接得到test可执行程序。
所以当执行make命令时候就会执行下面两条执行
gcc -c -o a.o a.c
gcc -o test a.o b.oMakefile的语法
通配符
假如一个目标文件所依赖的依赖文件很多那样岂不是我们要写很多规则这显然是不合乎常理的
我们可以使用通配符来解决这些问题。
我们对上节程序进行修改代码如下
test: a.o b.o gcc -o test $^%.o : %.cgcc -c -o $ $%.o表示所用的.o文件 %.c表示所有的.c文件 $表示目标 $表示第1个依赖文件 $^表示所有依赖文件
执行
make结果
gcc -c -o a.o a.c
gcc -c -o b.o b.c
gcc -o test a.o b.o