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.rhkb.cn/news/472384.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试时问到软件开发原则,我emo了

今天去一个小公司面试&#xff0c;面试官是公司的软件总监&#xff0c;眼镜老花到看笔记本电脑困难&#xff0c;用win7的IE打开leetcode网页半天打不开&#xff0c;公司的wifi连接不上&#xff0c;用自己手机热点&#xff0c;却在笔记本电脑上找不到。还是我用自己的手机做热点…

数字IC后端低功耗设计实现案例分享(3个power domain,2个voltage domain)

下图所示为咱们社区T12nm A55低功耗实现项目。其实这个项目还可以根据产品的需求做一些改进。改进后项目实现的难度会大大增加。也希望通过今天的这个项目案例分享&#xff0c;帮助到今年IC秋招的同学。 芯片低功耗设计实现upf编写指南&#xff08;附低功耗项目案例&#xff0…

自动驾驶仿真:软件在环(SIL)测试详解(精简版入门)

自动驾驶仿真&#xff1a;软件在环&#xff08;SIL&#xff09;测试详解 一、引言 自动驾驶技术的快速发展对测试验证提出了更高要求。软件在环&#xff08;Software-in-the-Loop&#xff0c;简称SIL&#xff09;仿真测试作为自动驾驶系统验证的重要手段&#xff0c;通过将自…

03-axios常用的请求方法、axios错误处理

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

2002.6 Partitioning the UMLS semantic network.划分 UMLS 语义网络

Partitioning the UMLS semantic network | IEEE Journals & Magazine | IEEE Xplore 问题 统一医学语言系统&#xff08;UMLS&#xff09;语义网络中的语义类型&#xff08;ST&#xff09;在知识表示和应用中存在不足&#xff0c;例如 ST 的组织方式缺乏直观性和可解释性…

WSL与Ubuntu系统--使用Linux

WSL与Ubuntu系统--使用Linux 前言基础教学视频卸载链接网络配置方法1方法2 正式安装步骤步骤1 基本命令修改网络配置Ubuntu系统的导出与导入文件操作给Ubuntu创造界面--也就是在装一个有界面的UbuntuHyper-v与windows主机文件共享 前言 需要链接梯子&#xff0c;并且梯子十分稳…

ZooKeeper单机、集群模式搭建教程

单点配置 ZooKeeper在启动的时候&#xff0c;默认会读取/conf/zoo.cfg配置文件&#xff0c;该文件缺失会报错。因此&#xff0c;我们需要在将容器/conf/挂载出来&#xff0c;在制定的目录下&#xff0c;添加zoo.cfg文件。 zoo.cfg logback.xml 配置文件的信息可以从二进制包…

AlphaFold3中文使用说明

目录 1. 在线网站用例1. 使用json输入预测蛋白结构 2. 本地命令行2.1 运行示例2.2 AF3输入A&#xff09;指定输入B&#xff09;输入格式b&#xff09;JSON最外层结构b.1 序列多序列比对&#xff08;MSA&#xff09;结构模板&#xff08;templates&#xff09; b.2 共价键b.3 用…

vue2/vue3中使用的富文本编辑器vue-quill

前言&#xff1a; 整理下常用的富文本编辑器工具。 vue3: 实现效果&#xff1a; 实现步骤&#xff1a; 1、安装插件&#xff0c; 编辑器核心插件 vueup/vue-quill yarn add pnpm i npm i cnpm i vueup/vue-quill vueup/vue-quill 2、安装选择性插件 &a…

【星海随笔】ZooKeeper-Mesos

开源的由 Twitter 与 伯克利分校的 Mesos 项目组共同研发设计。 两极调度架构 支持高可用集群&#xff0c;通过ZooKeeper进行选举。 Mesos master 管理着所有的 Mesos slave 守护进程 每个slave运行具体的任务或者服务。 Franework 包括的调度器和执行机两部分 执行器运行在Me…

Spring Cloud Eureka 服务注册与发现

Spring Cloud Eureka 服务注册与发现 一、Eureka基础知识概述1.Eureka两个核心组件2.Eureka 服务注册与发现 二、Eureka单机搭建三、Eureka集群搭建四、心跳续约五、Eureka自我保护机制 一、Eureka基础知识概述 1.Eureka两个核心组件 Eureka Server &#xff1a;服务注册中心…

前后端分离练习(云客项目)

这几天学习了一点前端的开发&#xff0c;后面通过这个小项目来整理开发的过程&#xff0c;参考的是动力节点的动力云客这个项目&#xff0c;大家有兴趣可以去看一下视频&#xff0c;我更多的是学习了它的前端开发&#xff0c;后端我是用自己的方式来的&#xff0c;那么开始今天…

Spring boot + Vue2小项目基本模板

Spring boot Vue2小项目基本模板 基本介绍基本环境安装项目搭建最终效果展示 基本介绍 项目来源哔哩哔哩的青戈&#xff0c;跟着学习搭建自己的简单vue小项目&#xff1b;看别人的项目总觉得看不懂&#xff0c;需要慢慢打磨 这里目前只简单的搭建了菜单导航和表格页面&#x…

金融领域先锋!海云安成功入选2024年人工智能先锋案例集

近日&#xff0c;中国人工智能产业发展联盟《2024年人工智能先锋案例集》&#xff08;以下简称“AIIA先锋案例集”&#xff09;在中国人工智能产业发展联盟第十三次全体会议上正式发布。该案例集由人工智能产业发展联盟&#xff08;AIIA&#xff09;、工业和信息化部新闻宣传中…

基于OpenCV的图片人脸检测研究

目录 摘要 第一章 引言 第二章 基于 OpenCV 的图片人脸检测 2.1 实现原理 2.2 代码实现与分析 2.3 代码详细分析 第三章 实验结果与分析 第四章 OpenCV 人脸检测的优势与局限性 4.1 优势 4.2 局限性 第五章 结论 第六章 未来展望 参考文献 摘要 人脸检测是计算机视…

【计算机毕设】无查重 基于python豆瓣电影评论舆情数据可视化系统(完整系统源码+数据库+开发笔记+详细部署教程)✅

目录 【计算机毕设】无查重 基于python豆瓣电影数据可视化系统&#xff08;完整系统源码数据库开发笔记详细部署教程&#xff09;✅ 一、项目背景 二、项目目标 三、项目功能 四、开发技术介绍 五、数据库设计 六、项目展示 七、开发笔记 八、启动步骤文档 九、权威教…

Python学习从0到1 day29 Python 高阶技巧 ⑦ 正则表达式

目录 一、正则表达式 二、正则表达式的三个基础方法 1.match 从头匹配 2.search&#xff08;匹配规则&#xff0c;被匹配字符串&#xff09; 3.findall&#xff08;匹配规则&#xff0c;被匹配字符串&#xff09; 三、元字符匹配 单字符匹配&#xff1a; 注&#xff1a; 示例&a…

[Python学习日记-67] 封装

[Python学习日记-67] 封装 简介 如何隐藏类中的属性 封装并不是单纯意义的隐藏 封装与扩展性 特性&#xff08;property&#xff09; 简介 从封装本身的意思去理解&#xff0c;封装就好像是拿来一个麻袋&#xff0c;把小猫、小狗、小王八和小猪一起装进麻袋&#xff0c;然…

@Autowired 和 @Resource思考(注入redisTemplate时发现一些奇怪的现象)

1. 前置知识 Configuration public class RedisConfig {Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template new RedisTemplate<>();template.setConnectionFactory(facto…

MongoDB分布式集群搭建----副本集----PSS/PSA

MongoDB分布式集群 Replication 复制、Replica Set 复制集/副本集 概念 一、 副本集的相关概念 1.概念 “ A replica set is a group of mongod instances that maintain the same data set. ” 一组MongoDB服务器&#xff08;多个mongod实例&#xff09;&#xff08;有不…