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而言下面的规则全都是最终的目标提供服务的。

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

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

总结

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

相关文章

  • VisualStudio2022下配置 OpenMP多线程编程环境与运行

    VisualStudio2022下配置 OpenMP多线程编程环境与运行

    本文主要介绍了VisualStudio2022下配置 OpenMP多线程编程环境与运行,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Qt实现闹钟小程序

    Qt实现闹钟小程序

    这篇文章主要为大家详细介绍了Qt实现闹钟小程序,利用Qt的designer设计需要的闹钟界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 详解C++中的const和constexpr

    详解C++中的const和constexpr

    这篇文章主要为大家介绍了C++中的const和constexpr ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • C语言实现三子棋程序

    C语言实现三子棋程序

    这篇文章主要为大家详细介绍了C语言实现三子棋程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C++中的常对象与常对象成员详解

    C++中的常对象与常对象成员详解

    常成员函数可以访问常对象中的数据成员,但仍然不允许修改常对象中数据成员的值。有时在编程时有要求,一定要修改常对象成员中的某个数据成员的值(例如类中有一个用于计数的变量count,其值应当不能变化)
    2013-10-10
  • C++代码实现网络Ping功能

    C++代码实现网络Ping功能

    这篇文章主要介绍了C++代码实现网络Ping功能,Ping命令被送到本地计算机的IP软件,该命令永不退出该计算机,本文给大家介绍的非常详细,需要的朋友参考下吧
    2021-08-08
  • 一文搞懂Codec2解码组件

    一文搞懂Codec2解码组件

    这篇文章主要介绍了Codec2解码组件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • C++图像处理之双边滤波

    C++图像处理之双边滤波

    这篇文章主要为大家详细介绍了C++图像处理之双边滤波,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • VS2019 Nuget找不到包的问题处理

    VS2019 Nuget找不到包的问题处理

    这篇文章主要介绍了VS2019 Nuget找不到包的问题处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • C++图文并茂分析讲解内存管理

    C++图文并茂分析讲解内存管理

    本章主要介绍C语言与C++的内存管理,以C++的内存分布作为引入,介绍C++不同于C语言的内存管理方式(new delete对比 malloc free),感兴趣的朋友来看看吧
    2022-09-09

最新评论