d目录

1.多文件编程结构组成

2. Makefile

3.动态库和静态库

总结:



1.多文件编程结构组成

        1.1示意图:

        1.2各文件说明

.h文件

        包含: #ifndef  XXX.h        //作用:防止头文件重复包含

                    #define  XXX.h

                             头文件的引用

                             数据类型定义 

                             宏定义

                             全局变量声明

                             全局函数声明

                    #endif

.c文件

        包含: 功能实现代码

                    #include XXX.h //若此函数自身要用自己的东西则需包含对应的头文件

                    

        经验:   不让外部用的变量或者函数,在其前加static关键字     

           1.3文件夹

src                 存放源文件

inc                 存放源文件

build              存放生成的可执行程序

lib                  存放库文件

          1.4注意:

①include 的<>和“”的区别:

        系统/第三方库 → 用 < >

        自己项目的文件 → 用 " " (∵优先在当前文件开始寻找,若没找到才去系统库找)

2. Makefile


       2.1 简介:Makefile是一个工程管理工具,输入make,系统会查找当前目录下的Makefile文件,然后根据规则对代码进行编译


        2.2 makefile语法:

要生成的文件:依赖的所有文件
        生成规则        

#注释用#号

#“ 生成规则 ” 前面的空格为tab键

示例


        2.3 makefile中的变量:

                 系统变量

$@        要生成的文件
$<         第一个依赖的文件
$^         所有依赖的文件,中间空格隔开

                 自定义变量

变量的定义

        变量名 = 值

变量的使用
        $(变量名)
  或  ${变量名}


        2.4 makefile中的赋值

=           赋值
:=          覆盖赋值         #与赋值符号=是等价的
+=         在原来值的基础上再加新的值
?=         原来没值,就赋值新值,原来有值,不会赋值新值

        2.5伪指令

指令代码

                注意:①.PHONY为伪指令开始标志,下边用户编写的clean、distclean、install、uninstall为伪指令

                          ②使用方法:输入 sudo make 伪指令,再输入用户密码,按回车即可运行


        2.6 gcc的编译选项

-E         完成预处理,编译成展开后C语言代码
-S         完成预处理、编译,编译成汇编代码
-c         完成预处理、编译、汇编,编译成二进制代码
-o         指定生成文件的名字
-I          指定头文件的路径
-L         指定库文件的路径
-l          指定链接库的名称
-Wall    取出编译器优化,打印所有告警信息
-O        设置编译优化级别

        2.7 Makefile三个常用的格式替换函数

wildcard        查找指定目录下满足格式的文件


#遍历找到add目录下所有的.c文件放入SRCS变量中

SRCs :=$(wildcard ./add/*.c)


patsubst        格式替换,根据格式将变量中的字符串完成替换


#将SRCS变量中所有的满足格式的.,格式替换为对应的.0

0B]s :=$(patsubst ./add/*.c,./build/*.0,$(SRCS))


notdir        去除文件路径,只留下文件名


#将SRCS变量中的所有文件去除路径,只留下文件名

0BJs := $(notdir $(sRcs))

3.动态库和静态库


        3.1库文件:
                在链接时与源代码链接为一个可执行程序代码实现的二进制形式,
        3.2 库文件分类:

        1.静态库(lib库名.a)
                        1.在编译时加载到程序中
                        2.静态库会使代码体积增大
                        3.多个程序使用同一静态库,需要分别加载各自独立的静态库4.删除静态库不会对代码运行产生影响

                        4.删除静态库不会对代码运行产生影响

        2.动态库(lib库名.so)
                1.在运行时加载到程序中
                2.动态库不会使代码体积增大
                3.多个程序可以使用通一动态库,节省代码体积

                4.删除动态库,代码将无法运行

总结:

今日的重点有:

        多文件编程的结构组成
        ② Makefile的基本概念,应用场景,使用方法
        ③
动态库和静态库的特点及使用方法


今天的嵌入式自学笔记就到这儿啦~

C语言到此结束

                                

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐