运行系统和环境:Linux Unbuntu 18.04 - CodeBlocks
Error:因为headfile缺失,查找不到variable以及function。
Analyze:headfile没有complied,所以很多重命名的变量类型以及变量不能被c编译识别。从而报错。此时还未涉及到内存overflow的问题,也不涉及buffer区和PC RAM读写速率问题。
Solution:首先在解决问题之前,先解释一下makefile是什么。
Makefile:
- 工程管理器,指管理较多的文件
- Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作
- Make将只编译改动的代码文件,而不用完全编译。
如何去使用makefile:在学会写makefile之前,需要知道一个程序是如何从源文件到可执行文件的。可以简单的分为三个步骤:1.预处理。2.编译。3.链接。通常在我们在linux的内核下直接用gcc *.c 就可以直接完成这三个步骤,但是当源程序很多的时候,尤其是大型的工程项目中,有成千上万个.c文件,我们也不能一行一行的命令去编译然后生成可执行文件。这样也太傻了,所以这个时候就有了makefile文件,他可以统一管理所有的源程序文件,集中编译,统一生成可执行文件,简单来说就是方便。通常我们在执行命令gcc *.c之后就会生成很多个*.o文件然后通过执行gcc -o *.o > 目标文件名.exe 生成可执行文件。 - 当我们编写好makefile文件之后。只需要在终端目录下面输入make,举个例子,比如我现在在
~/home/sdk/samples$ make
下面有一个文件makefile(已经存在,且已经编写好),这样的话,我只需要执行:~/home/sdk/samples$ make
执行完该指令后,会生成多个*.o文件,最重要的是,生成了目标文件,该目标文件的名称由你自己在makefile中设置。 我们再通过执行以下命令就可以运行目标文件:
~/home/sdk/samples$ ./目标文件名称
记得在目标文件前面加./
如果要清除makefile生成的所有文件,直接在终端输入:
~/home/sdk/samples$ make clean
这样就又是一个干净的小伙子了。
下面再举一个实例:
黄色的文件夹下的所有文件,其中第一个是makefile文件。
直接在当前的目录下面执行make,运行makefile文件。
我们再看看当前目录下生成了哪些文件,下图红色是生成的文件包括原有文件。其中有一个是目标文件,由你自己命令,我们执行./目标文件就可以直接运行。
执行make clean 可以清除所有生成的文件。
所以目前问题得到解决,编译成功,但是出现了新的问题。
下一篇研究。目前还在主线任务上面。