栈的定义 * 栈仅能在线性表的一端进行操作 栈顶(Top) : 允许操作的一端 栈底(Bottom) :不允许操作的一端 栈的性质 栈的操作 # 栈的一些常用操作 * 创建栈 * 销毁栈* 清空栈* 进栈* 出栈* 获取栈顶元素* 获取栈的大小 栈的顺序存储实现 下面的顺序栈是不能支持结构体的! 现 Read More
001_Makefile的引入及规则 使用keil、mdk、avr 等工具开发程序时点点鼠标就可以编译了, 它的内部机制是什么?它怎么组织管理程序?怎么决定编译哪一个文件? gcc -o test a.c b.c //简单 a.c ==>APP 执行编译(预处理、编译、汇编)、链接 a.c ==> Read More
gcc 和 arm-linux-gcc的常用选项 gcc 的使用方法: gcc 【选项】 文件名 gcc常用选项: -v:查看gcc 编译器的版本,显示gcc执行时的详细过程 -o < file > Place the output into < file > 指定输出文件名为file,这个名称不能 Read More
make是以从上到下的顺序读入Makefile中的内容的。然而,处理Makefile中的语句却并非完全从上到下。 大体上,make处理一个Makefile分为两个阶段。第一个阶段包含: 1.make读入Makefile,以及Makefile中所包含的其他Makefile; 2.make分析并获得变量 Read More
在对应目录中放入对应的文件 执行make后报错: 这是在构建依赖文件时,gcc因为找不到foo.h而报错。那是因为foo.h和foo.c放在不同的目录中,这样需要使用gcc的 -I 选项,指定包含路径,所以,更改后的Makefile如下: 这样就完成了支持头文件目录指定。 从Makefile的角度看 Read More
先手工创建几个文件目录: 接下来先创建code/foo/src目录下的Makefile: 具体和complicated项目的差别可以看书或者上篇随笔。 第一个提示没有那个目录,可以在include的时候加上'-'就可以忽略这个,因为这里对我们的项目没有实质影响,但是新手对于报错或者警告总是不放心,故 Read More
现在我们再对complicated项目做一些更改,增加程序文件间依赖关系的复杂度。 在之前的Makefile不做更改的情况下,我们make一下: 在这次成功编译的基础上,我们再做一些改动,注意在这之前不要执行make clean,否则不能发现新问题。 从结果看,尽管foo.c和main.c都被重新编 Read More
Makefile中存在一个include指令,它的作用如同C语言中的#include预处理指令。在Makefile中,可以通过使用include指令将自动生成的依赖关系文件包含进来,从而使得依赖关系文件中的内容成为Makefile的一部分。 在此之前,先介绍一下Makefile中的include的用 Read More
后面会介绍gcc获得源文件依赖的方法,gcc这个功能就是为make而存在的。我们采用gcc的-MM选项结合sed命令。使用sed进行替换的目的是为了在目标名前加上“objs/”前缀。gcc的-E选项,预处理。在生成依赖关系时,其实并不需要gcc编译源文件,只要预处理就可以获得依赖关系了。通过-E选项 Read More
在大多项目中都会合理设计目录结构来提高维护性,在编译一个项目时会产生大量中间文件,如果中间文件直接和源文件放在一起,就显得杂乱而不利于维护。在为现在这个complicated项目编写makefile之前,我们先给出目录结构需求: 1.将所有的目标文件放在objs子目录中; 2.将最终生成的可执行程序 Read More