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

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

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

     编写Makefile_干饭小白的博客-CSDN博客_编写makefile 

  • 相关阅读:
    谁能想到,字节2023校招起薪40w+
    docker安全
    网络空间搜索引擎及常用的端口漏洞
    MyBatis一对多查询,MyBatis中resultMap的使用,MyBatis中collection注意事项,MyBatis的级联搜索
    数据治理-数据仓库和商务智能-部分内容
    springMvc22-eclipse创建Maven项目没有src/main/java并不能新建的问题
    Python异步编程之web框架 异步vs同步 Redis并发对比
    PaddlePaddle----基于paddlehub的OCR识别
    【毕业季】你好陌生人,这是一封粉色信笺
    Neo4j入门实战
  • 原文地址:https://blog.csdn.net/weixin_46120107/article/details/126149556