96SEO 2026-02-20 06:10 0
。
这个make命令的背后就是按照了Makefile文件定义的格式去完成项目构建。
因此Makefile的作用就是帮助程序员进行项目的构建#xff0c;它按照项目…makefile案例学习
clone完一个project之后就会让我们使用make命令进行项目的构建。
这个make命令的背后就是按照了Makefile文件定义的格式去完成项目构建。
因此Makefile的作用就是帮助程序员进行项目的构建它按照项目的需求个性化的定义自己的构建过程。
Makefile并不限定编程语言但是在c/c项目中使用相对较多。
其他的一些构建工具例如qmake也是将*.pro文件转化为Makefile再进行构建。
commandcommand...其中targets为目标文件
格式一中command不与target:prerequisites在一行必须以Tab键开头。
command和prerequisites在一行那么可以用分号做为分隔。
(1)如果发现目标文件不存在但是依赖文件存在就会执行命令集构建生成目标文件。
(2)如果发现目标文件不存在但是依赖文件也不存在那么就会寻找依赖文件的构建模块
(3)如果发现目标文件已经存在依赖文件也存在make指令会自动去比较两者的修改时间
依赖文件的最后修改时间早于目标文件就不会执行指令集合。
同时会提示目标文件已经是最新的。
依赖文件不存在那么makefile将会寻找依赖文件的构建模块并尝试构建依赖模块
main首先看构建main对象main对象依赖于main.o对象main:main.o
main.o对象构建成功这样就可以构建main对象于是执行了main对象的命令g
vpath和VPATH主要作用是通过指定文件的搜索路径自动寻找源文件但是这种自动推导需要你将vpath/VPATH与$,$^结合使用。
PATH1:PATH2:PATH3将需要搜索的目录按照冒号分割。
为符合模式pattern的文件指定搜索目录directories。
path1:path2其表示搜索.c结尾的文件先在path1搜索。
makefile自动推导出了语句在main.cpp前加上了src前缀。
makefile提供了一些内置函数帮助我们的构建过程更加自动化。
PATTERN...)它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。
查找text中的单词单词以空格、“Tab或回车”换行分隔是否符合模式pattern如果匹配的话则以replacement替换。
foreach函数的工作过程是把LIST中使用空格分割的单词依次取出并赋值给变量ITEM然后执行TEXT表达式。
重复这个过程直到遍历完LIST中的最后一个单词。
函数的返回值是TEXT多次计算的结果。
$(dir)/*.cpp))这段makefile就取出了src和src/math目录下所有的cpp文件
静态模式可以更加容易地定义多目标的规则可以让我们的规则变得更加的有弹性和灵活。
我们还是先来看一下语法
...commands...targets定义了一系列的目标文件可以有通配符。
是目标的一个集合。
target-pattern是指明了targets的模式也就是的目标集模式。
prereq-patterns是目标的依赖模式它对target-pattern形成的模式再进行一次依赖目标的定义。
在讲解makefile自动生成依赖之前,先给出本节中例子的目录结构和文件内容:
}在Makefile中我们的依赖关系可能会需要包含一系列的头文件比如如果我们的main.cpp中有一句#include
add.hpp但是使用一些模式匹配的方法是不能够自动将这些依赖的头文件也包含进去的
如果add.hpp文件添加了内容并不会使得main.o重新构建。
这不是我们所期望的。
add.hppGNU组织建议把编译器为每一个源文件的自动生成的依赖关系放到一个文件中为每一个.cpp的文件都生成一个.d的Makefile文件然后再使用include将.d的依赖关系添加进来
add.hpp可以看出展开后在该makefile中,出现了两个main.o的目标。
在Makefile中一个文件可以作为多个规则的目标出现。
这种情况时此目标文件的所有依赖文件将会被合并成此目标一个依赖文件列表其中任何一个依赖文件比目标更新比较目标文件和依赖文件的时间戳时
对于一个多规则的目标重建此目标的命令只能出现在一个规则中可以是多条命令。
如果多个规则同时给出重建此目标的命令make将使用最后一个规则所以的命令同时提示错误信息一个特殊的例外是使用.开头的多规则目标文件可以在多个规则中给出多个重建命令。
这种方式只是为了和其他版本make进行兼容一般在GNU
因此上述含有多目标的makefile可以转化为如下的makefile:
因为main.cpp依赖于add.hpp因此main.o会重新编译。
main.d这里使用了sed去修改了gcc默认生成的依赖关系即将main.o:
因此为了避免和文件重名的这种情况我们可以使用一个特殊的标记.PHONY来显式地指明一个目标是伪目标向make说明不管是否有这个文件这个目标就是伪目标。
clean只要有这个声明不管是否有clean文件要运行clean这个目标只有make
其中inc目录中包含了add.hpp和sub.hpp两个头文件。
在srcmath子目录中包含了add.cpp和sub.cpp两个文件。
TARGET$(TEMP_PATH)/$(MODULE)CPP_SOURCES
$(CPP_OBJS)CXXFLAGS-I./inc$(TARGET):
src:src/math:inc首先使用VPATH依赖文件存在的路径
TARGET$(TEMP_PATH)/$(MODULE)CXXFLAGS-I./inc这里定义了一些变量包括源文件的路径
$(CPP_OBJS)这里首先使用foreach去遍历SOURCE_PATH路径下的所有的.cpp文件
$(TEMP_PATH)/main最后这个模块用于清除生成的文件。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback