• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-08-15 18:52 Aet 隐藏边栏 |   抢沙发  7 
文章评分 6 次,平均分 5.0

概述

  1. 是一种组织代码编译的方法
  2. 它是一个普通文本文件,其中包含了一系列规则和依赖关系,描述了如何从源代码文件构建目标文件
    1. 这些规则和依赖关系被make工具读取和执行

规则

  1. 规则是Makefile的核心部分,每个规则定义了一个构建目标
    1. target: 需要构建的文件
    2. dependencies: 构建目标所依赖的文件。
    3. commands: 构建目标所需执行的命令

  1. 示例:
    1. main.c构建一个名为main的可执行文件

变量

  1. Makefile中,你可以定义和使用变量来简化构建过程
  2. 定义:

  1. 使用:
    1. 在规则中使用$(VARIABLE_NAME)来引用它

伪目标

  1. 有时,你可能想要定义一些不与文件关联的目标。这些被称为伪目标
  2. 示例:
    1. 运行make clean会删除main可执行文件

模式规则

  1. 还可以使用模式规则来为具有相似名称的文件定义通用规则
  2. 示例:
    1. 这个规则适用于所有.o文件,$<表示依赖文件,$@表示目标文件

函数

  1. Makefile还支持一些内置函数,如wildcardpatsubst等,用于字符串和文件名操作

include

  1. Makefile中,include指令用于包含一个或多个其他的Makefile文件
    1. 这可以让你将一个大的Makefile拆分成更小、更可管理的片段
  2. 包含一个文件

  1. 包含多个文件

  1. 通配包含

  1. 使用变量

  1. 当包含的文件不存在时,会导致错误
    1. 但可以在include前面加一个连字符(-),让make忽略文件不存在的错误

区别于CMake

  1. 都是构建系统工具,但它们的工作方式和目的有所不同

Makefile

  1. 直接构建:
    1. MakefileGNU Make工具使用的具体文件,它包括了构建项目所需的所有具体指令、规则和依赖关系
  2. 平台特定:
    1. Makefile通常是手动为特定平台和编译器编写的
    2. 因此,将Makefile从一个平台迁移到另一个平台可能需要手动更改和调整
  3. 开发者通常直接编写Makefile,手动指定编译器标志、源文件、目标等

CMake

  1. 构建系统生成器:
    1. Makefile不同,CMake不直接构建项目
    2. 相反,它是一个工具,用于从高级配置文件生成构建系统
    3. 你可以使用CMake生成MakefileVisual Studio项目文件、Xcode项目等
  2. 跨平台:
    1. CMake的主要优势之一是跨平台兼容性
    2. 开发者编写一组通用的CMake配置文件,然后可以在不同的平台和编译器上使用它们
    3. CMake负责生成适合特定平台的构建文件
  3. CMake提供了一些更高级的功能,如自动依赖解析、包查找和管理、测试集成等

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2023-08-19
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享