C语言高级Day04内存分配与Makefile

一、内存动态分配

(一)堆区内存

  1. 变量的内存存储区:
  • 编译时内存空间大小就确定了。
变量类型 内存存储区
全局变量 静态区
局部变量 栈区
  • 堆区内存:由用户主动申请,由用户显示的释放。
  1. malloc:申请内存函数,该函数时系统调用。
  2. free:显示的释放内存函数。
  3. 堆区内存生命周期:从malloc开始到free或程序结束而结束。
  4. 作用域:
  5. 堆区内存使用完不可以不释放,也不可以重复释放。

二、Makefile工程管理器

  1. 主要是用于对工程(很多.c文件)的自动编译问题。可以自动的识别文件修改的时间,可以自动对修改该过的文件进行编译,其他未修改的文件,不会别重复编译。
  2. Makefile文件的编写:
  • 格式:

目标:依赖

​ 完成该目标的动作和规则

  1. 创建变量和使用变量:
  • 定义变量的两种方式:

    • 递归展开方式:VAR=var

    将右值将所有的变量都展开,得到的值为所有变量最终展开后的值
    优点: 它可以向后引用变量
    缺点: 不能对该变量进行任何扩展,例如 CFLAGS = $(CFLAGS) -O 会造成死循环

    • 简单方式:VAR: =var
  • 变量的使用:$变量名

将右值将所有的变量都展开,得到的值为所有变量当前值展开后的值
用这种方式定义的变量,会在变量的定义点,按照被引用的变量的当前值进行展开
这种定义变量的方式更适合在大的编程项目中使用,因为它更像我们一般的编程语言

  • 自动变量:
变量名 作用
$* 不包含扩展名的目标文件名称
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$< 第一个依赖文件的名称
$? 所有时间戳比目标文件晚的的依赖文件,并以空格分开
$@ 目标文件的完整名称
$^ 所有不重复的目标依赖文件,以空格分开
$% 如果目标是归档成员,则该变量表示目标的归档成员名称
  1. Make使用:直接运行make
  • 选项:

-C dir读入指定目录下的Makefile
-f file读入当前目录下的file文件作为Makefile
-i 忽略所有的命令执行错误
-I dir指定被包含的Makefile所在目录
-n 只打印要执行的命令,但不执行这些命令 调试Makefile
-p 显示make变量数据库和隐含规则
-s 在执行命令时不显示命令
-w 如果make在执行过程中改变目录,打印当前目录名

  1. 获取当前目录中所有.c结尾的文件:SRC = $(wildcard *.c)
  2. 字符串末尾的替换:在 ( p a t s u b s t (patsubst %.c,%.o, (patsubst(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o

你可能感兴趣的:(嵌入式学习笔记,Linux,C语言学习,c语言,开发语言)