学习笔记(八)嵌入式中,Make , CMake 以及makefile分别是什么? 有什么用?

makecmake 的关系在于它们在软件构建中具有互补性,但目的不同:

  • make 是一个构建工具,负责执行 Makefile 中指定的编译和构建任务。
  • cmake 是一个构建生成工具,负责根据 CMakeLists.txt 生成适合平台的构建文件(例如 Makefile 或 Visual Studio 项目文件)。cmake 生成 Makefile 后,仍然需要使用 make 去实际执行构建。

名称来源

  • makemake 这个名字来源于“制作”的含义,代表它可以帮助“制作”或构建项目。1977年发布的 make 是最早的自动化构建工具之一。
  • cmakecmake 是 "Cross-platform Make" 的缩写,表示它可以跨平台生成构建文件。

makecmake 是两种常用的构建工具,它们各有不同的用途和侧重点。以下是它们的主要区别:

1. 定位和功能

  • makemake 是一个构建自动化工具,通过解析 Makefile 来执行项目的构建、编译和链接等步骤。它并不负责生成 Makefile,而是依赖于现有的 Makefile 文件。
  • cmakecmake 是一个跨平台的构建系统生成工具,用于生成适配不同平台的构建文件(如 Makefile、Visual Studio 项目文件等)。它的主要任务是解析 CMakeLists.txt 文件,将项目配置为特定平台的构建文件,然后由 make 等工具执行编译。

2. 文件类型

  • make:依赖 Makefile,直接通过该文件中的规则进行构建。Makefile 是一种较底层、需要手动编写的文件,开发者需要显式定义每一步的依赖关系和命令。
  • cmake:使用 CMakeLists.txt 配置文件,自动生成适合平台的 Makefile 或项目文件,降低了手动配置构建文件的复杂性。cmake 允许跨平台构建,能够自动根据系统环境设置构建参数。

3. 跨平台支持

  • make:主要用于 UNIX 系统(Linux、macOS 等),Windows 下使用较少。在 Windows 下使用 make 时通常需要依赖 Cygwin、MSYS2 等工具。
  • cmake:天然跨平台,支持生成适用于多种平台的构建文件,包括 Unix 系统的 Makefile、Windows 系统的 Visual Studio 项目文件、macOS 的 Xcode 项目文件等。开发者可以在多个平台上使用同一套 CMakeLists.txt 文件,而不需要针对不同操作系统分别编写构建文件。

4. 灵活性和复杂性

  • make:直接读取 Makefile,非常灵活。对于简单项目,make 文件内容较少,直接指定编译命令和依赖关系即可。对于复杂项目,Makefile 可能变得难以维护,尤其是依赖关系复杂或跨平台的项目。
  • cmake:简化了复杂项目的构建过程,自动管理依赖关系。对于多平台支持、第三方库的引入、复杂的依赖关系等,cmake 可以简化配置,自动识别平台差异并做适配。

5. 依赖管理

  • makemake 不会自动检测依赖项,需要手动指定源文件间的依赖关系。若依赖关系未设置正确,可能导致文件更新时未自动重新编译。
  • cmake:自动检测依赖项,能够在 CMakeLists.txt 中自动生成依赖关系。当文件发生更改时,cmake 会重新生成构建文件,确保依赖关系正确。

使用对比示例

假设有一个简单的 C++ 项目,其中包含 main.cpputils.cpp,使用 makecmake 分别配置该项目的构建方式:

使用 make
# Makefile
CC = g++
CFLAGS = -Wall -g
TARGET = myapp

all: $(TARGET)

$(TARGET): main.o utils.o
	$(CC) -o $(TARGET) main.o utils.o

main.o: main.cpp
	$(CC) $(CFLAGS) -c main.cpp

utils.o: utils.cpp
	$(CC) $(CFLAGS) -c utils.cpp

clean:
	rm -f $(TARGET) *.o
使用 cmake
# CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(myapp)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)

# 添加源文件
add_executable(myapp main.cpp utils.cpp)

cmake 中,简单的配置可以让 CMake 自动管理依赖,并根据平台自动生成对应的 Makefile 或项目文件。而 make 文件需要显式地列出每个依赖项,并指定编译命令。

总结

特性makecmake
作用执行 Makefile 指定的构建规则生成适配平台的构建文件(如 Makefile
配置文件MakefileCMakeLists.txt
跨平台支持较弱强,支持多平台
依赖管理手动管理自动管理
适用场景小型项目,简单构建过程跨平台,大型项目,复杂构建需求

对于简单项目或仅在 Unix 系统上的构建,make 可能更直观。而对于跨平台的中大型项目,cmake 更适合,能自动生成各平台的构建文件并管理复杂依赖关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

门外的兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值