欢迎光临
我们一直在努力

C语言进阶必备| 多文件编程及Makefile使用

一、多文件编程结构组成

  • 头文件中<>和“”的区别

include<stdio.h>

//在系统标准头文件目录中去找stdio.h文件

include"fun1.h"

//先在当前项目的源文件目录中去找fun1.h,找不到去系统找

使用建议:系统库头文件用<>,自定义头文件用""。

  • 防止头文件重复定义(类型定义时

示例:

#ifndef     _ _ADD_H_ _

#define    _ _ADD_H_ _

#endif

二、Makefile

        工程管理工具,输入make,系统会查找当前目录下的Makefile文件根据规则对代码进行编译

1.makefile语法

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

                生成规则

示例:

        target: dependency1 dependency2

                gcc dependency1 dependency2 -o target

%.o:%c   

//任意的.o文件都依赖于.c文件

2.makefile中的变量

        变量用于简化重复的文件路径、编译选项等,提升 Makefile 可维护性

(1)系统变量

$<     第一个依赖的文件

$@   要生成的文件

$^     所有依赖的文件,中间用空格隔开

(2)自定义变量

变量名 = 值

$(变量名)

${变量名}

(3)makefile中的赋值

=     赋值

:=    覆盖赋值

+=   在原来值的基础上再加新的值

?=   原来没值赋新值,原来有值则不赋值

3.gcc的编译选项

-E             完成预处理,编译成展开后的C语言代码

-S             完成预处理,编译,编译成为汇编代码

-c             完成预处理,编译,汇编,编译成为二进制代码

-o             指定生成文件的名字

-I              指定头文件的路径

-L             指定库文件的路径

-l              指定链接库的名称

-Wall        取出编译器优化,打印所有告警信息

-O            设置编译器优化级别

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

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

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

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

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

//将SRCS变量中所有的满足格式的.c格式替换为对应的.o

        OBJS := $(patsubst ./add/*.c, ./build/*.o,$(SRCS))

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

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

        OBJS  := $(notdir $(SRCS))

示例:

5.编译步骤

通过 Makefile 自动化执行的编译步骤(从源码到可执行文件):

  • 预处理(-E):展开头文件、替换宏、处理条件编译;
  • 编译(-S):将预处理后的 C 代码转换为汇编代码;
  • 汇编(-c):将汇编代码转换为二进制目标文件(.o);
  • 链接:将所有.o 文件与库文件链接,生成可执行程序。

6.动态库和静态库

(1)库文件

        代码实现的二进制形式,在链接时与源代码连接成一个可执行文件

(2)库文件分类

  • 静态库
  • 在编译时加载到程序中;
  • 静态库会使代码体积增大;
  • 多个程序使用同一静态库,需要分别加载各自独立的静态库;
  • 删除静态库不会对代码运行产生影响。
  • 动态库
  • 在运行时加载到程序中;
  • 动态库不会使代码体积增大;
  • 多个程序可使用同一动态库,节省代码体积;
  • 删除动态库,代码将无法运行。
赞(0)
未经允许不得转载:171主机测评 » C语言进阶必备| 多文件编程及Makefile使用
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址