学习了cp命令,mv命令,rm命令,cat命令,wc命令,chmod命令,ln命令以及一些常用命令。接着开始了Linux下C语言开发环境的学习。主要学习了编辑器Vi,编译器gcc,调试器gdb还有makefile的使用。
在学习中我最感兴趣的就是makefile,因为它体现了人性化以及智能的一面,为程序员节省了很多不必要的程序运行时间,以下是我对makefile的一些总结。
1.一个普通C代码的正常情况下的编译
上图只是一个参考,因为操作还不熟练,下面给出正确代码:
mkdir 4make
cd 4make
mkdir 1make
cd 1make
vim operator.c
gcc operator.c -o 1
./1
operator.c内容:
#include <stdio.h>
int add(int a,int b)
{
return a + b;
}
int sub(int a,int b)
{
return a - b;
}
int main()
{
int a = 3;
int b = 2;
printf("%d %d\n",add(a,b),sub(a,b));
return 0;
}
2.当有多个文件的C代码时的传统编译
add.c内容:
int add(int a,int b)
{
return a + b;
}
sub.c内容:
int sub(int a,int b)
{
return a - b;
}
operator.c内容:
#include <stdio.h>
int main()
{
int a = 3;
int b = 2;
printf("%d %d\n",add(a,b),sub(a,b));
return 0;
}
这种情况只有三个代码文件,编译时哪怕有四个步骤运行起来也很快,但如果一个大的工程里分给很多不同的人来做,届时会有几十个甚至上百个文件,当其中一个文件发生更新时,程序员又需要把代码敲一遍,而且已更新的文件连带着未经过改变的文件进行着编译的四个步骤,这样就显得很不智能化,因此第三种情况我们就要使用makefile来解决这个问题。
3.当有多个文件的C代码时使用makefile
makefile里的内容:
由于makefile这样写,不能直观的知道当其中有文件更新时,每次make的时候都做了哪些工作,所以下面进行第四种情况。
4.
makefile中的内容:
可以看出当更新过add.c之后,make时只会将与add.c有关的命令再运行一遍,而其他文件无须再进行一次编译,省去了很多时间也变得更智能了。
但其实make很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中。
而且makefile中有变量的使用:
OBJECTS = sum.o sub.o operator.o #定义变量
$(OBJECTS) #使用变量
所以makeflie有最终写法。
5.
Makefile中的内容: