当前位置: 首页 > article >正文

C语言之MakeFile

Makefile 的引入是为解决多文件项目中手动编译繁琐易错、缺乏自动化构建、项目管理维护困难以及跨平台构建不便等问题,实现自动化、规范化的项目构建与管理

MakeFile

简单的来说,MakeFile就是编写编译命令的文件

文件编写格式

目标:依赖文件列表

<Tab>命令列表

1,目标:通常是要产生的文件名称,目标可以是可执行文件或其他obj文件,也可是一个动作的名称

2,依赖文件:是用来输入从而产生目标文件,一个目标通常有几个依赖文件(也可以没有)

3,命令:make执行的动作,一个规则可以含几个命令(也可以没有);有多个命令是,每个命令占一行

如:

        main:main.c

                gcc main.c -o main
        clear:
                rm main
注意:
        当目标后没有依赖文件,我们将其称之为假想目标

变量

系统变量

由系统提供的变量

        make工具会拷贝系统的环境变量并将其设置为makefile的变量,在makefile中可直接读取或修改拷贝后的变量

查看系统变量命令:

        env

修改或添加系统变量

        export 变量名=值

        注意:

                export是导入的意思

注意:

        只是临时修改,当dos关闭后,将不存在

如:makefile编写如下

        main:make.o myutils.o

                gcc main.o myutils.o -o main

     clear:

               rm main *.o

      myprint:

                echo ${PWD}   

*.o 是一个通配符表达式,表示要删除当前目录下所有后缀为 .o 的目标文件

echo 是用于在终端打印输出内容的命令,${PWD} 是一个环境变量引用(在类 Unix 系统中,PWD 表示当前工作目录,即 “Present Working Directory”),所以当执行这个 myprint 目标对应的命令时,会在终端打印出当前所在的工作目录路径信息。

自定义变量:程序员在编写makefile文件中自定义的变量

预定义变量:make命令提供的变量

自定义变量

定义: 变量名=变量值

使用:

        取值;${变量名}或$(变量名)

        拼接:变量名+=值

注意:

        1,makefile变量名可以以数字开头

        2,变量的大小是敏感的

        3,变量一般都在makefile的头部定义

        4,变量几乎可以在makefile的任何地方使用

预定义变量

makefile 中有许多预定义变量,这些变量具有特殊的含义,可在 makefile 中直接使
用。
        $@ 目标名
        $< 依赖文件列表中的第一个文件
        $^ 依赖文件列表中除去重复文件的部分
        AR 归档维护程序的程序名,默认值为 ar
        ARFLAGS 归档维护程序的选项
        AS 汇编程序的名称,默认值为 as
        ASFLAGS 汇编程序的选项
        CC C 编译器的名称,默认值为 gcc
        CFLAGS C 编译器的选项
        CPP C 预编译器的名称,默认值为 $(CC) -E
        CPPFLAGS C 预编译的选项
        CXX C++编译器的名称,默认值为 g++
        CXXFLAGS C++编译器的选项

 编写模板

EXEC = 可执行文件名

OBJ = 二进制文件名列表

FLAG = -wall -g


$(EXEC):$(OBJ)

        $(CC) $(OBJ) -o $(EXEC) $(-wall -g)

二进制文件名1.o:源文件名1.c

        $(CC) -c 源文件名.c -o 二进制文件名.o

二进制文件名2.o:源文件名2.c

        $(CC) -c 源文件名.c -o 二进制文件名.o

clear:
        rm $(EXEC) *.o

注意:源文件名与二进制文件名相同

make命令

解析makefile文件的命令

检查make命令是否存在

        which make

        或

        make --version

GNU Make名词

GNU make 是一种代码维护工具, make 工具会根据 makefile 文件定义的规则和步
骤,完成整个软件项目的代码维护工作
        优点:
                1、管理我们的源文件
                2、会检查每个源文件是否被修改 只会再次只编译修改过的源文件(提高编译效
率)
        缺点:
                makefile文件: Window 上的集成开发环境下,会自动生成, 在 Linux 下需要手
动编写。
使用
语法 :
        make 目标
        注意: 目标可以没有 , 默认执行第一个目标
注意:
        1、 make 默认在工作目录中寻找名为 GNUmakefile makefile Makefile 的文件作为 makefile 输入文件
        2、 -f 可以指定以上名字以外的文件作为 makefile 输入文件
        3、若使用 make 命令时没有指定目标,则 make 工具默认会实现 makefile 文件内的第一个目标,然后退出。
: 在控制台输入
        1,输入 make, 默认执行 makefile 文件中第一个目标中命令
        2,输入 make 目标 , 执行 makefile 文件中指定的目标中的命令
        3,当 makefile 的文件名不是 GNUmakefile makefile Makefile , 可以输入make -f 文件名 , makefile 文件


http://www.kler.cn/a/395573.html

相关文章:

  • FreeRTOS的列表与列表项
  • javaWeb小白项目--学生宿舍管理系统
  • Redis知识点整理 - 脑图
  • Java 包装类
  • QTcpSocket 服务端和客户端
  • 从0学习React(11)
  • SQL,力扣题目1126,查询活跃业务
  • 响应“一机两用”政策 落实政务外网安全
  • 【系统架构设计师】真题论文: 论企业集成平台的架构设计(包括解题思路和素材)
  • uniapp小程序分享使用canvas自定义绘制 vue3
  • 【开源免费】基于SpringBoot+Vue.JS高校学科竞赛平台(JAVA毕业设计)
  • 【MYSQL】数据库三大范式是什么?【最简单理解】
  • 多端校园圈子论坛小程序,多个学校同时代理,校园小程序分展示后台管理源码
  • ‌MySQL 5.7和8.0版本在多个方面存在显著区别,主要包括性能优化、新特性引入以及安全性提升
  • 2:Vue.js 父子组件通信:让你的组件“说话”
  • git命令提交项目
  • 适用比亚迪汽车生产线的RFID高频读写器
  • 为什么 Vue3 封装 Table 组件丢失 expose 方法呢?
  • 鸿蒙学习-PersistentStorage持久化存储
  • 【递归回溯与搜索算法篇】算法的镜花水月:在无尽的自我倒影中,递归步步生花
  • 深入浅出:Java 中的经典排序算法详解与实现
  • 1、C语言学习专栏介绍
  • 排序算法 -归并排序
  • 机器学习的常用算法
  • SQLite3 JDBC Java工具类
  • 网站部署到IIS后,数据库登录失败