C++项目实战-makefile

简介: 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

相关文章
|
6月前
|
算法 API 计算机视觉
[opencv学习笔记] jiazhigang 30讲源码C++版本(含Makefile)
[opencv学习笔记] jiazhigang 30讲源码C++版本(含Makefile)
74 0
|
6月前
|
人工智能 Shell 编译器
C/C++编译工具:makefile | AI工程化部署
Makefile是一种用于管理和组织源代码的工具,通常用于构建和编译软件项目。它由一系列规则组成,每个规则指定如何生成一个或多个目标文件。Makefile也包括变量和注释,使得用户能够灵活地配置和定制构建过程。【1月更文挑战第3天】
195 3
|
网络协议 C++ iOS开发
C++项目实战-UDP服务器
C++项目实战-UDP服务器
117 0
|
存储 网络协议 Linux
C++项目实战-实际应用(一)
C++项目实战-实际应用(一)
98 0
|
算法 调度 C++
C++项目实战-信号(二)
C++项目实战-信号(二)
55 0
|
存储 Linux C++
C++项目实战-多进程(一篇文章)(三)
C++项目实战-多进程(一篇文章)(三)
114 0
|
1月前
|
Linux C++
Linux c/c++之makefile的基础使用
Linux下C/C++项目中makefile的基本使用,包括基础、进阶和高级用法,以及如何创建和使用makefile来自动化编译过程。
17 0
Linux c/c++之makefile的基础使用
|
5月前
|
Linux Shell C++
linux C/C++ makefile
linux C/C++ makefile
|
6月前
|
JSON NoSQL C++
VScode调试C/C++项目调试多个C++程序makefile
VScode调试C/C++项目调试多个C++程序makefile
195 0
|
存储 网络协议 Unix
C++项目实战-socket编程
C++项目实战-socket编程
80 1