C++项目实战之makefile使用

 更新时间:2024年05月01日 08:26:42   作者:存钱买房的陈一言  
这篇文章主要介绍了C++项目实战之makefile使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

makefile简介

一个工程中的源文件不计其数(一个项目有有很多的文件),现在的项目基本都是按模块进行划分的,而这些模块存放在若干目录中。

makefile中定义了一系列的规则(这些规则定义了一系列如何编译程序的操作,比如哪些文件需要编译、哪些临时文件需要及时的清除等),如此以来我们只需要通过make命令就可以一键编译源程序了。

所以常常说makefile带来的最大的好处就是"自动化编译",因为只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发效率。(以上用于可能不规范,是作者的理解)

make简介

make是一个命令工具,它能够解释Makefile文件中的指令,一般来说大多数IDE都具备这样的功能。

makefile的编写的规则

makefile文件的命名:

makefile 或者 Makefile

makefile的规则:

三要素:目标   依赖    命令

格式==》

  • 目标:依赖
  • (TAB)命令

目标:最终要生成的文件(伪目标除外) 

依赖:生成目标所需要的文件或目标(这里的目标是子目标)

命令:通过执行命令来操作依赖来生成目标

我们来看一个例子

当前文件夹有如下5个文件

第一个版本的Makefile 

第二个版本我们添加以下子目标

添加子目标的目的:

  • make工作原理1

命令在执行前,需要先检查规则中的依赖是否存在

  • 如果存在,则执行命令
  • 如果不存在,则向下搜索,检查有没有一个规则的目标是这个依赖,
  • 如果存在则先执行这个子目标,先生成这个最终目标所需的依赖,
  • 那么我们有了依赖才可以生成最终目标

collect2: error: ld returned 1 exit status   

//为毛会出现这个问题,好像是子啊制作动态库的时候才会用这个问题

第三个版本我们通过自定义变量的方式

第四个版本我们通过makfile中的自动变量

第五个版本使用函数

makefile中主要使用的只要两个函数

wildcard  ==》查找指定目录下的指定文件  

src=$(wildcard ./*.c)

patsubst  ==》将指定目录下的什么文件后缀进行替换

obj=$(pastsubst ./%.c,./%.o,$(src))

第6个版本 加上仿函数

加上仿函数的目的:

对于makefile而言下面的规则全都是最终的目标提供服务的。

如果不是最终规则(第一个规则)所需要的依赖那么不会区执行。

但是通过伪目标就可以打破这个约定,一定会执行

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++实现简单学生信息管理系统

    C++实现简单学生信息管理系统

    这篇文章主要为大家详细介绍了C++实现简单学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C/C++多态深入探究原理

    C/C++多态深入探究原理

    多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数
    2022-06-06
  • 在vscode中快速新建html文件的2种方法总结

    在vscode中快速新建html文件的2种方法总结

    这篇文章主要给大家介绍了关于在vscode中快速新建html文件的2种方法,以及如何快速打开HTML文件查看编辑效果的方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • OpenCV实现视频绿幕背景替换功能的示例代码

    OpenCV实现视频绿幕背景替换功能的示例代码

    这篇文章主要介绍了如何利用OpenCV实现视频绿幕背景替换功能,文中的示例代码讲解详细,对我们学习OpenCV有一定的帮助,感兴趣的可以学习一下
    2023-02-02
  • 解析在Direct2D中画Bezier曲线的实现方法

    解析在Direct2D中画Bezier曲线的实现方法

    本篇文章是对在Direct2D中画Bezier曲线的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言实现生成新春福字的示例详解

    C语言实现生成新春福字的示例详解

    这篇文章主要介绍了如何利用C语言实现生成各个字体的新春福字,再也不用担心支付宝扫福找不到图片了,感兴趣的同学可以跟随小编学习一下
    2022-01-01
  • 关于C++中vector的两个小tips分享

    关于C++中vector的两个小tips分享

    这篇文章主要给大家介绍了关于C++中vector的两个小tips,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • C语言中形参和实参的区别小结

    C语言中形参和实参的区别小结

    本文介绍了C语言中形参和实参的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12
  • 详解C语言中未定义行为

    详解C语言中未定义行为

    C语言中的未定义行为是指程序执行违反标准时,行为未指定的情况,未定义行为可能导致程序崩溃、数据损坏和不可预测的结果,下面就来介绍几种常见未定义行为的例子,感兴趣的可以了解一下
    2026-01-01
  • 利用Matlab实现阴影柱状图的绘制

    利用Matlab实现阴影柱状图的绘制

    阴影柱状图绘制的代码MATHWORKS上也有,不过是生成图片后,识别图像上不同颜色块并直接修改像素生成阴影线。这样的生成方式不可逆且自由度较低,所以本文为大家带来的是一个直接画线条填充的硬画版本,希望有所帮助
    2022-09-09

最新评论