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

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 文件

相关文章:

C语言之MakeFile

Makefile 的引入是为解决多文件项目中手动编译繁琐易错、缺乏自动化构建、项目管理维护困难以及跨平台构建不便等问题&#xff0c;实现自动化、规范化的项目构建与管理 MakeFile 简单的来说,MakeFile就是编写编译命令的文件 文件编写格式 目标:依赖文件列表 <Tab>命令列表…...

vue项目PC端和移动端实现在线预览docx、excel、pdf文件

可以参考vue-office官方github&#xff1a;​​​​​​​GitHub - loonghe/vue-office: 支持word(.docx)、excel(.xlsx,.xls)、pdf等各类型office文件预览的vue组件集合&#xff0c;提供一站式office文件预览方案&#xff0c;支持vue2和3&#xff0c;也支持React等非Vue框架。…...

FlinkSql读取kafka数据流的方法(scala)

我的scala版本为2.12 <scala.binary.version>2.12</scala.binary.version> 我的Flink版本为1.13.6 <flink.version>1.13.6</flink.version> FlinkSql读取kafka数据流需要如下依赖&#xff1a; <dependency><groupId>org.apache.flink&…...

.NET 9 中 IFormFile 的详细使用讲解

在.NET应用程序中&#xff0c;处理文件上传是一个常见的需求。.NET 9 提供了 IFormFile 接口&#xff0c;它可以帮助我们轻松地处理来自客户端的文件上传。以下是 IFormFile 的详细使用讲解。 IFormFile 接口简介 IFormFile 是一个表示上传文件的接口&#xff0c;它提供了以下…...

使用阿里云远程访问 Synology Web Station 的指南

使用阿里云远程访问 Synology Web Station 的指南 本文将指导如何通过阿里云服务器配置 Nginx 和 FRP&#xff0c;远程访问部署在 Synology NAS 上的 Web Station 服务&#xff0c;同时支持 HTTPS 安全访问。 背景 通过 Synology NAS 的 Web Station&#xff0c;可以部署 Wor…...

LlamaFactory介绍

目录 一、什么是LlamaFactory 1. 安装 LlamaFactory 2. 下载 LLaMA 模型 3. 运行 LLaMA 模型 4. 微调 LLaMA 模型 5. 优化本地运行 6. 推理加速 7. 硬件要求 二、总结 一、什么是LlamaFactory LlamaFactory 是一个用于训练和运行 LLaMA(Meta 的开源大型语言模型)模型…...

vue 项目使用 nginx 部署

前言 记录下使用element-admin-template 改造项目踩过的坑及打包部署过程 一、根据权限增加动态路由不生效 原因是Sidebar中路由取的 this.$router.options.routes,需要在计算路由 permission.js 增加如下代码 // generate accessible routes map based on roles const acce…...

<项目代码>YOLOv8 玉米地杂草识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…...

Wxml2Canvas小程序将dom转为图片,bug总结

1.显示文字 标签上面使用 data-type"text" 加上class名 <view data-type"text" class"my_draw_canvas"><text data-type"text" class"center my_draw_canvas" data-text"企业出游证明">企业出游证明…...

[ 网络安全介绍 3 ] 网络安全事件相关案例有哪些?

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

SpringMVC学习笔记(二)

五、Rest风格编程 &#xff08;一&#xff09;Rest风格URL规范介绍 1、什么是restful RESTful架构&#xff0c;就是目前最流行的一种互联网软件架构风格。它结构清晰、符合标准、易于理解、扩展方便&#xff0c;所以正得到越来越多网站的采用。REST这个词&#xff0c;是Roy T…...

51c嵌入式~单片机合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、不同的电平信号的MCU怎么通信&#xff1f; 下面这个“电平转换”电路&#xff0c;理解后令人心情愉快。电路设计其实也可以很有趣。 先说一说这个电路的用途&#xff1a;当两个MCU在不同的工作电压下工作&…...

JavaScript:浏览器对象模型BOM

BOM介绍 浏览器对象模型&#xff08;Brower Object Model&#xff0c;BOM&#xff09;提供了独立于内容而与浏览器窗口进行交互的对象&#xff0c;其核心对象是window BOM由一系列相关的对象构成&#xff0c;并且每个对象都提供了很多方法和属性。 BOM与DOM区别 DOM是文档对…...

Unity音频导入设置

参考&#xff1a;unity官方文档 导入设置 Force To Mono&#xff1a;强制单声道。启用后音频片段将降混为单声道声音。可以节省该资源所占据的空间。 Normalize&#xff1a;峰值归一化。降混过程通常会导致信号比原始信号更安静。峰值归一化的信号为音频源的音量属性提供了后…...

【数据分享】中国对外投资合作发展报告(2013-2023)

数据介绍 绪 论............................................................................................................................. 1 对外投资合作高质量发展迈出新步伐................................................................... 2 第一篇 发…...

java8之Stream流

文章目录 Stream流的定义和特性‌定义特性‌中间操作‌终结操作‌ 生成流forEachmapfilterlimitsorted并行&#xff08;parallel&#xff09;程序Collectors Stream流的定义和特性‌ 定义 Stream是Java 8 API添加的一个新的抽象&#xff0c;用于以声明性方式处理数据集合。它…...

pipx安装提示找不到包

执行&#xff1a; pipx install --include-deps --force "ansible6.*"WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnectionError(<pip._vendor.urllib3.connection.HTTPSConnection …...

Codeforces Round 987 (Div. 2)(前四道)

A. Penchick and Modern Monument 翻译&#xff1a; 在繁华大都市马尼拉的摩天大楼中&#xff0c;菲律宾最新的 Noiph 购物中心刚刚竣工&#xff01;建筑管理方 Penchick 订购了一座由 n 根支柱组成的先进纪念碑。 纪念碑支柱的高度可以用一个由 n 个正整数组成的数组 h 来表示…...

PCB+SMT线上报价系统+PCB生产ERP系统自动化拼板模块升级

PCB生产ERP系统的智能拼版技术&#xff0c;是基于PCB前端报价系统获取到的用户或市场人员已录入系统的板子尺寸及set参数等&#xff0c;按照最优原则或利用率最大化原则自动进行计算并输出拼版样式图和板材利用率&#xff0c;提高工程人员效率&#xff0c;减少板材的浪费。覆铜…...

微信小程序_小程序视图与逻辑_day3

一、目标 A. 能够知道如何实现页面之间的导航跳转 B. 能够知道如何实现下拉刷新效果 C. 能够知道如何实现上拉加载更多效果 D. 能够知道小程序中常用的生命周期 二、目录 A. 页面导航 B. 页面事件 C. 生命周期 D. WXS脚本 E. 案例-本地生活&#xff08;列表页面&#xff09;…...

FLUX.小红书极致真实V2规模化落地:单节点支持10并发请求,QPS达2.1

FLUX.小红书极致真实V2规模化落地&#xff1a;单节点支持10并发请求&#xff0c;QPS达2.1 1. 项目简介 你是否曾经遇到过这样的困扰&#xff1a;想要生成小红书风格的高质量图片&#xff0c;但要么效果不够真实&#xff0c;要么生成速度太慢&#xff0c;要么显存不够用&#…...

CodeSys自定义HTML5控件:从零构建到工程实践

1. 为什么需要自定义HTML5控件&#xff1f; 在工业自动化领域&#xff0c;可视化监控是设备管理的重要环节。CodeSys作为主流的工业控制开发平台&#xff0c;其WebVisu功能虽然提供了基础控件库&#xff0c;但在实际项目中经常会遇到这样的尴尬&#xff1a;标准控件无法满足特定…...

保姆级教程:STM32F103开发第一步,搞定Keil5安装、激活与芯片包(附资源包)

STM32F103开发环境搭建全指南&#xff1a;从Keil5安装到芯片包配置 引言&#xff1a;为什么选择Keil MDK进行STM32开发 对于刚接触STM32微控制器的新手来说&#xff0c;开发环境搭建往往是第一个"拦路虎"。Keil MDK&#xff08;Microcontroller Development Kit&…...

万兆NAS成本大揭秘:用MicroServer Gen8+二手X520网卡搭建全流程(含读写性能实测)

万兆NAS成本大揭秘&#xff1a;用MicroServer Gen8二手X520网卡搭建全流程&#xff08;含读写性能实测&#xff09; 在追求高速网络存储的时代&#xff0c;万兆NAS已成为技术爱好者的新宠。本文将带你深入了解如何以最低成本搭建一套性能不俗的万兆NAS系统&#xff0c;核心硬件…...

CentOS8网络管理大变革:从network.service到NetworkManager的全面解析

CentOS8网络管理架构深度解析&#xff1a;从传统命令到NetworkManager的进化之路 如果你是一位长期使用CentOS的系统管理员&#xff0c;最近升级到CentOS8后可能会遇到一个令人困惑的问题&#xff1a;当你习惯性地输入systemctl restart network命令时&#xff0c;系统却无情地…...

银河麒麟V10 SP1下使用rsync实现多客户端定时数据备份(避坑指南)

银河麒麟V10 SP1多客户端数据同步全链路配置与优化实战 在IT运维工作中&#xff0c;数据备份如同氧气般不可或缺。想象一下&#xff0c;当数十台客户端设备同时运行时&#xff0c;如何确保关键业务数据能够安全、高效地集中备份&#xff1f;银河麒麟V10 SP1作为国产操作系统的…...

PP-DocLayoutV3入门必看:从零部署到JSON结构化输出完整流程

PP-DocLayoutV3入门必看&#xff1a;从零部署到JSON结构化输出完整流程 1. 开篇&#xff1a;认识文档布局分析利器 你是否曾经遇到过这样的困扰&#xff1a;面对扫描的文档图片&#xff0c;想要提取其中的文字和结构信息&#xff0c;却不知道从何下手&#xff1f;或者需要处理…...

[特殊字符] Local Moondream2图文对话教程:详细步骤实现自定义问题提问

Local Moondream2图文对话教程&#xff1a;详细步骤实现自定义问题提问 1. 引言&#xff1a;让电脑拥有"眼睛"的智能工具 你是否曾经希望电脑能像人一样看懂图片&#xff0c;并且回答关于图片内容的问题&#xff1f;Local Moondream2就是这样一款神奇的工具&#x…...

5个步骤掌握UE4SS:虚幻引擎游戏定制与脚本开发完全指南

5个步骤掌握UE4SS&#xff1a;虚幻引擎游戏定制与脚本开发完全指南 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS …...

微信聊天记录永久保存:WeChatExporter开源工具全流程指南

微信聊天记录永久保存&#xff1a;WeChatExporter开源工具全流程指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 问题&#xff1a;数据丢失的三重警示 2023年某科技…...