首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Linux】Makefile & CMake—基操

【Linux】Makefile & CMake—基操

作者头像
六点半就起.
发布2025-08-06 08:00:17
发布2025-08-06 08:00:17
3240
举报

Makefile:

Makefile背景

在 Linux 环境下,Makefile 是用于自动化编译程序的脚本文件,它定义了源代码与目标文件之间的依赖关系,以及生成目标文件的编译规则。make是一条命令,makefile是一个文件。

基操
代码语言:javascript
复制
目标: 依赖
	命令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工作原理:
  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  2. 如果找到,它会找文件中的第一个目标文件(target),在下面的例子中,他会找到“hello”这个文件,并把这个文件作为最终的目标文件
  3. 当前目录无 .o 一直往下找,找到 .c 当前目录下有,在一步步向上执行生成hello.exe

CMake:

CMake背景:

CMake 是一个跨平台的、开源的构建自动化工具,用于管理软件编译过程,通过编写简单的配置文件(CMakeLists.txt),可以生成不同平台的构建文件(如 Makefile、Visual Studio 项目文件等)

基操
  1. 在myproject目录下: (1)mkdir build(build目录用来存放cmake后生成的一系列文件) (2)vim CMakeLists.txt并编写如下代码 (3)写好的main.cpp

CMakeLists.txt并编写如下代码:

代码语言:javascript
复制
如下图所示完成  -> mycode.exe
CMake -->调试

配置调试模式

  1. set(CMAKE_BUILD_TYPE Debug) #指定 CMake 的构建类型为 Debug(调试模式)
  2. set(CMAKE_CXX_FLAGS_DEBUG “${CMAKE_CXX_FLAGS_DEBUG} -g -O0”)

作用:为 C++ 代码的调试模式添加额外编译选项。(CXX代表C++)

  1. 参数解析: ${CMAKE_CXX_FLAGS_DEBUG}:引用 CMake 内置的 C++ 调试模式默认编译选项(避免覆盖原有配置)。
  2. -g:告诉编译器(GCC/Clang/G++ 等)生成调试符号(包含代码行号、变量信息等),没有这个选项,调试器无法关联源码。
  3. -O0:关闭编译器优化(O 是 Optimization 的缩写,0 表示无优化)。
  4. 为什么需要关闭优化? 编译器优化(如 -O1、-O2)可能会重排代码、删除未使用变量、合并语句等,导致调试时执行顺序与源码不一致,变量值无法正确查看,-O0 可避免这些问题。

二者区别:

CMake 是一个用于生成构建文件(如 Makefile)的工具,侧重于项目的配置和跨平台构建管理; 而 Makefile 是具体指导构建过程的脚本文件,直接与构建工具(make)配合使用来完成项目的编译和链接。

二者相同点:

目的相同:都是帮助开发者构建软件项目,将源代码文件编译、链接成可执行文件或库文件,从而实现从代码到可用程序的转化。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Makefile:
    • Makefile背景
    • 基操
    • 自动变量:进一步简化规则
    • Makefile工作原理:
  • CMake:
    • CMake背景:
    • 基操
    • CMake -->调试
  • 配置调试模式
    • 二者区别:
    • 二者相同点:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档