- 变量的内存存储区:
- 编译时内存空间大小就确定了。
| 变量类型 | 内存存储区 |
|---|---|
| 全局变量 | 静态区 |
| 局部变量 | 栈区 |
- 堆区内存:由用户主动申请,由用户显示的释放。
- malloc:申请内存函数,该函数时系统调用。
- free:显示的释放内存函数。
- 堆区内存生命周期:从malloc开始到free或程序结束而结束。
- 作用域:
- 堆区内存使用完不可以不释放,也不可以重复释放。
- 主要是用于对工程(很多.c文件)的自动编译问题。可以自动的识别文件修改的时间,可以自动对修改该过的文件进行编译,其他未修改的文件,不会别重复编译。
- Makefile文件的编写:
- 格式:
目标:依赖
完成该目标的动作和规则
- 创建变量和使用变量:
-
定义变量的两种方式:
- 递归展开方式:VAR=var
将右值将所有的变量都展开,得到的值为所有变量最终展开后的值
优点: 它可以向后引用变量
缺点: 不能对该变量进行任何扩展,例如 CFLAGS = $(CFLAGS) -O 会造成死循环- 简单方式:VAR: =var
-
变量的使用:$变量名
将右值将所有的变量都展开,得到的值为所有变量当前值展开后的值
用这种方式定义的变量,会在变量的定义点,按照被引用的变量的当前值进行展开
这种定义变量的方式更适合在大的编程项目中使用,因为它更像我们一般的编程语言
- 自动变量:
| 变量名 | 作用 |
|---|---|
| $* | 不包含扩展名的目标文件名称 |
| $+ | 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件 |
| $< | 第一个依赖文件的名称 |
| $? | 所有时间戳比目标文件晚的的依赖文件,并以空格分开 |
| $@ | 目标文件的完整名称 |
| $^ | 所有不重复的目标依赖文件,以空格分开 |
| $% | 如果目标是归档成员,则该变量表示目标的归档成员名称 |
- Make使用:直接运行make
- 选项:
-C dir读入指定目录下的Makefile
-f file读入当前目录下的file文件作为Makefile
-i 忽略所有的命令执行错误
-I dir指定被包含的Makefile所在目录
-n 只打印要执行的命令,但不执行这些命令 调试Makefile
-p 显示make变量数据库和隐含规则
-s 在执行命令时不显示命令
-w 如果make在执行过程中改变目录,打印当前目录名
- 获取当前目录中所有.c结尾的文件:SRC = $(wildcard *.c)
- 字符串末尾的替换:在 ( p a t s u b s t (patsubst %.c,%.o, (patsubst(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o



