【嵌入式学习——知识点总结】Make工程管理

1、头文件的书写

刚开始要注意一个格式:条件编译(作用:防止头文件被重复包含)

假设头文件叫main.h,格式如下:

#ifndef _MAIN_H
#define _MAIN_H

	1、其他头文件

	2、宏的定义

	3、枚举的定义

	4、结构体的定义

	5、共用体的定义

	6、函数的声明

	7、全局变量的引用(extern#endif

2、对工程的理解

一个主文件+若干个子文件+若干个头文件(若干个子文件均是由主文件进行调用)。

其组成和作用如下:

  1. 总控Makefile:是一个普通文件,用来控制src和obj文件夹里面的makefile执行。
  2. include:所有的.h文件。
  3. bin:包含可执行文件,可以是多个。
  4. obj:包含所有的.o文件及其makefile文件(makefile的作用:所有的.o文件经过链接生成可执行文件,并将其移动至bin目录下)。
  5. src:包含所有的.c文件及其makefile(makefile的作用:所有的.c文件经过单独编译不链接生成.o文件,并将其移动至obj目录下)。
    理解make工具

特点:根据时间戳来执行的。
时间戳:只会查找:当前文件的时间和上次编译之后的文件的时间存在时间差值的文件,将其进行编译。

3、 Make的格式

	目标:依赖
	[Tab键]命令表

解释:

  • 目标:类比成一个产品。
  • 依赖:生成这个产品的材料。
  • 命令表:交代了如何将材料制作成产品。

注意:输完目标和依赖之后,按下回车,如果光标的位置还在该行的开头位置,就需要按下Tab键,如果发现此时自己往后缩进了,就不需要按下。

make是如何执行的?

首先判断依赖是否存在,得出两个结果:

  1. 依赖存在:直接经由命令表生成目标即可

  2. 依赖不存在:肯定不能直接一步生成目标,但是不意味着就要结束,因为改文本下方可能存在了该依赖作为一个目标是如何被生成的。因此需要先执行下方的代码,然后回过头再继续生成刚开始需要被生成的目标。

4、如何执行make

格式:make 目标名

注意:最常用的形式是只输入make就可以的(此时进入makefile这个文件之后,会将遇到的第一个目标作为自己的首要目标来进行执行,只要该首要目标被完成了,就直接会终止Makefile文件的执行)

5、make中的一些变量

  1. 用户自定义变量

    定义变量格式

    定义:变量名

    赋值:变量名:=值

    使用变量的值:$(变量名)

  2. 自动变量

    $@:目标

    $<:依赖中的第一个依赖

    $^:依赖中的所有依赖

  3. 系统预定义变量

    CC:代表C编译器的名称,默认值为cc,赋值为gcc

    CFLAGS:代表C编译器的选项,无默认值,赋值: -c -g -Wall

    RM:代表删除,默认值rm -f

  4. 环境变量
    export:可以指明将赋值给其的所有变量应用于整个工程。

实例:makefile_hello(管理一个.c文件)

1、新建hello.c文件

#include <stdio.h>

int main(int argc, const char *argv[])
{
	printf("hello world!\n");
	return 0;
}

2、新建Makefile文件

MyHaha:hello.o
	gcc hello.o -o MyHaha
hello.o:hello.c
	gcc -c hello.c -o hello.o

ps:首先执行

Myhaha:hello.0

发现无依赖文件hello.o,然后执行

hello.o:hello.c

存在hello.c文件,执行完:

gcc -c hello.c -o hello.o

回去再执行

gcc hello.o -o MyHaha

目标完成。

3、此文件夹下,会出现以下文件
在这里插入图片描述
4、在编译器下输入./MyHaha,即可打印:“hello world!”。

以上就是简单的makefile的实现,复杂的原理相同。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值