Cmake中 makefiles 的作用

背景

传统意义上的 Makefiles 是用于自动化构建过程的文件,主要在 Unix-like 系统(如 Linux 和 macOS)上使用。Makefiles 定义了如何编译和链接程序,包括编译指令、源文件、目标文件、依赖关系和最终的可执行文件。Makefiles 是由 make 工具使用的,make 是一个构建自动化工具,用来控制和自动化编译过程。

为什么说传统意义上的 Makefiles 呢?
因为有专门为 Windows 或 Visual Studio 环境设计的 Makefiles,
命令为: cmake -G "Visual Studio 16 2019" -A x64
这里的 “Visual Studio 16 2019” 是生成器名称,表示你要生成 Visual Studio 2019 的项目文件。-A x64 是指定目标架构为 64 位。当然,你应该根据你安装的 Visual Studio 版本来调整生成器的名称。例如,如果你使用的是 Visual Studio 2022,你应该使用 “Visual Studio 17 2022” 作为生成器。

通过这种方式生成的项目文件可以直接在 Visual Studio 中打开,你可以利用 Visual Studio 的各种功能,如调试、代码编辑和项目管理等。

Makefiles 作用

Makefiles 用来描述如何编译和链接一个程序。简单地说,它告诉计算机如何从源代码文件(如 .cpp 文件)生成可执行文件。

Makefiles 的组成

一个 Makefile 主要由三部分组成:

  • 目标(Targets):通常是你想生成的文件,比如可执行文件或对象文件。目标后面跟着冒号。
  • 依赖(Dependencies):这些是构建目标所必需的文件,如源代码或其他目标。它们写在目标的后面,用空格隔开。
  • 规则(Rules):在新行中,用一个制表符(Tab)开始,这些是实际的命令,用来生成目标。

示例解释
让我们通过一个例子来更清楚地理解:

# 这是一个注释

# 目标:可执行文件 'program'
program: main.o utils.o
	g++ -o program main.o utils.o  # 这一行是编译命令,用来链接对象文件生成可执行文件

# 目标:对象文件 'main.o'
main.o: main.cpp
	g++ -c main.cpp  # 这一行是编译命令,用来把 'main.cpp' 编译成 'main.o'

# 目标:对象文件 'utils.o'
utils.o: utils.cpp
	g++ -c utils.cpp  # 这一行是编译命令,用来把 'utils.cpp' 编译成 'utils.o'

在这个 Makefile 中:

  • 目标 program 依赖于 main.o 和 utils.o。
  • 命令 g++ -o program main.o utils.o 用于链接 main.o 和 utils.o 来创建 program(可执行文件)。
  • 目标 main.o 依赖于 main.cpp,而命令 g++ -c main.cpp 将 main.cpp 编译成对象文件 main.o。
  • 同理,utils.o 依赖于 utils.cpp,命令 g++ -c utils.cpp 将 utils.cpp 编译成对象文件 utils.o。

使用 Makefile

当你在命令行中输入 make 并按回车时,make 程序会查找名为 “Makefile” 的文件,并尝试执行它定义的第一个目标(在这个例子中是 program)。make 会检查所有的依赖项(如 .o 文件和 .cpp 文件),只重新编译那些自上次编译后已经被修改的文件,这样可以节省时间。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值