本文主要是介绍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.og++ -o program main.o utils.o # 这一行是编译命令,用来链接对象文件生成可执行文件# 目标:对象文件 'main.o'
main.o: main.cppg++ -c main.cpp # 这一行是编译命令,用来把 'main.cpp' 编译成 'main.o'# 目标:对象文件 'utils.o'
utils.o: utils.cppg++ -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 文件),只重新编译那些自上次编译后已经被修改的文件,这样可以节省时间。
这篇关于Cmake中 makefiles 的作用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!