【Linux】Makefile Cmake—基操
Makefile & Cmake—基操
- Makefile:
- Makefile背景
- 基操
- 自动变量:进一步简化规则
- Makefile工作原理:
- Cmake:
- Cmake背景:
- 基操
- 二者区别:
- 二者相同点:
Makefile:
Makefile背景
在 Linux 环境下,Makefile 是用于自动化编译程序的脚本文件,它定义了源代码与目标文件之间的依赖关系,以及生成目标文件的编译规则。make是一条命令,makefile是一个文件。
基操
目标: 依赖命令1命令2...
目标(target):要生成的文件。
依赖(prerequisites):生成目标所需要的文件
命令(commands):生成目标的具体操作(如 gcc 编译命令),必须以 Tab 键开头(不能用空格,这是常见错误)
why?
(1)语法解析的历史约定,一行中以 Tab 开头的内容被视为编译命令
(2)“目标:依赖” 行(如 app: main.o)和 “命令行”(如 gcc main.o -o app)需要严格区分:
a.目标 / 依赖行以非空白字符开头(通常是目标名称);
b.命令行必须以 Tab 开头,以此告诉 Make 工具:“这是需要执行的命令”。
依赖关系:
mycode: main.cc
mycode依赖main.cc
mycode为.exe
依赖方法:
g++ main.cc -o mycode
自动变量:进一步简化规则
$@:指代当前规则的 “目标”;
$^:指代当前规则的 “所有依赖”
无需多言:
未使用 .PHONY 修饰
用 .PHONY 修饰,伪目标的特性是,总是被执行的。
Makefile工作原理:
- make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
- 如果找到,它会找文件中的第一个目标文件(target),在下面的例子中,他会找到“hello”这个文件,并把这个文件作为最终的目标文件
- 当前目录无 .o 一直往下找,找到 .c 当前目录下有,在一步步向上执行生成hello.exe
Cmake:
Cmake背景:
CMake 是一个跨平台的、开源的构建自动化工具,用于管理软件编译过程,通过编写简单的配置文件(CMakeLists.txt),可以生成不同平台的构建文件(如 Makefile、Visual Studio 项目文件等)
基操
- 在myproject目录下:
(1)mkdir build(build目录用来存放cmake后生成的一系列文件)
(2)vim CMakeLists.txt并编写如下代码
(3)写好的main.cpp
CMakeLists.txt并编写如下代码:
-
如下图所示完成 -> mycode.exe
二者区别:
CMake 是一个用于生成构建文件(如 Makefile)的工具,侧重于项目的配置和跨平台构建管理;
而 Makefile 是具体指导构建过程的脚本文件,直接与构建工具(make)配合使用来完成项目的编译和链接。
二者相同点:
目的相同:都是帮助开发者构建软件项目,将源代码文件编译、链接成可执行文件或库文件,从而实现从代码到可用程序的转化。