【Makefile】和【CMake】安装编译

在这里插入图片描述

Ubuntu 安装 CMake 构建工具

命令 sudo apt-get install cmake 用于在基于 Debian 的系统(如 Ubuntu)上安装 CMake 构建工具。这个命令将使用系统的包管理器(APT)从软件仓库中下载并安装 CMake。

执行以下步骤:

  1. 打开终端。

  2. 运行以下命令安装 CMake:

    sudo apt-get update
    sudo apt-get install cmake
    

    第一个命令 (apt-get update) 用于更新软件包列表,确保安装最新的版本。第二个命令 (apt-get install cmake) 用于安装 CMake。

  3. 根据提示输入用户密码,然后按照需要确认安装。

  4. 安装完成后,你可以通过运行以下命令检查已安装的 CMake 版本:

    cmake --version
    

    如果安装成功,你将看到安装的 CMake 的版本信息。

这样你就成功安装了 CMake。如果你有特定的项目需要构建,接下来可以按照该项目的文档或 README 文件中的指南执行构建步骤。

Makefile 和 CMake 的区别

MakefileCMake 都是用于构建项目的工具,但它们有一些区别。

Makefile:

  1. 语法: Makefile 使用自己的语法规则,包括规则、目标、依赖等。这是一种特定于 make 工具的语法。

  2. 平台依赖: Makefile 是平台相关的,同一个 Makefile 在不同的操作系统上可能需要进行修改。

  3. 手动维护: 对于大型项目,手动编写和维护 Makefile 可能会变得复杂,特别是在跨平台构建时。

  4. 编译器选项: Makefile 可以直接指定编译器和编译选项。

  5. 直接构建规则: Makefile 本身描述了构建规则,不需要其他工具。

CMake:

  1. 语法: CMake 使用一种更高级的、更简洁的语法,不同于 Makefile。它提供了更抽象的描述项目的方式。

  2. 平台中立: CMake 是平台中立的,可以在不同的操作系统上生成对应的本地构建文件,如 Makefile、Visual Studio 工程等。

  3. 自动生成: CMake 允许用户在一个 CMakeLists.txt 文件中描述项目,然后使用 CMake 工具自动生成相应的构建系统文件。

  4. 多编译器支持: CMake 支持多种编译器,可以在不同的编译器之间进行切换。

  5. 项目组织: CMake 通过目录结构来组织项目,使得项目更加模块化和可维护。

  6. 跨平台: CMake 使得跨平台构建更加容易,同一个 CMakeLists.txt 文件可以生成适用于不同操作系统的构建文件。

综合而言,CMake 提供了更高级、更灵活的项目描述方式,使得跨平台开发和维护更加容易。而 Makefile 更加底层,需要手动编写构建规则,适合简单的项目或对构建过程有严格要求的情况。在实际应用中,很多项目使用 CMake 作为高级构建系统,而在具体的编译时,CMake 会生成对应平台的 Makefile 或其他构建系统的文件。

特点MakefileCMake
语法Makefile语法规则高级且简洁的CMake语法
平台依赖平台相关平台中立
手动维护手动编写和维护可能复杂通过CMakeLists.txt自动生成
编译器选项直接指定编译器和编译选项更抽象,支持多种编译器
构建规则直接描述构建规则高层次描述项目结构和规则
自动生成不支持自动生成构建文件通过CMake工具自动生成构建文件
项目组织较为平坦的结构目录结构化,更模块化
跨平台需要手动处理平台差异支持跨平台构建

Makefile

当编写一个 Makefile 时,需要考虑项目的结构以及源代码和目标文件的分布。下面是一个简单的 Makefile 示例,假设你有一个 C 语言项目,包含两个源文件(main.cfunctions.c)以及一个头文件(functions.h)。

CC = gcc
CFLAGS = -Wall -g

# 源文件
SRC_FILES = main.c functions.c

# 目标文件
OBJ_FILES = $(SRC_FILES:.c=.o)

# 可执行文件
TARGET = myprogram

# 默认目标
all: $(TARGET)

# 生成可执行文件
$(TARGET): $(OBJ_FILES)
	$(CC) $(CFLAGS) -o $@ $^

# 生成目标文件
%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

# 清理生成的文件
clean:
	rm -f $(OBJ_FILES) $(TARGET)

这个 Makefile 包括以下部分:

  • CC:编译器(gcc)。
  • CFLAGS:编译器选项,包括警告开启(-Wall)和调试信息开启(-g)。
  • SRC_FILES:源文件列表。
  • OBJ_FILES:目标文件列表,通过将 .c 扩展名替换为 .o 生成。
  • TARGET:最终的可执行文件。
  • all:默认目标,表示执行 make 命令时,默认构建 TARGET
  • $(TARGET):生成可执行文件的规则,依赖于 OBJ_FILES
  • %.o: %.c:生成目标文件的规则,将每个 .c 文件编译成相应的 .o 文件。
  • clean:清理规则,用于删除生成的目标文件和可执行文件。

你可以将这个 Makefile 放在项目的根目录,并通过运行 make 命令来构建项目。如果需要清理生成的文件,可以运行 make clean。请根据你的项目结构和需求进行适当的修改。

CMake

下面是一个简单的CMakeLists.txt的示例,假设你的项目包含一个源文件 main.c:

# 指定CMake的最低版本
cmake_minimum_required(VERSION 3.10)

# 为项目命名
project(MyProject)

# 添加可执行文件并指定源文件
add_executable(my_executable main.c)

在这个示例中:

  • cmake_minimum_required(VERSION 3.10) 指定了CMake的最低版本要求。
  • project(MyProject) 为项目命名。
  • add_executable(my_executable main.c) 添加了一个可执行文件,并指定了源文件 main.c。

你可以将这个CMakeLists.txt文件放在你的项目根目录,然后使用以下命令在构建目录中生成构建文件:

cmake /path/to/your/project

接着,使用生成的构建系统(如Makefile)来构建你的项目:

make

以上只是一个简单的示例,实际的项目可能涉及更复杂的结构和依赖关系,CMake提供了丰富的功能来处理这些情况。

MakefileCMake是两种常用的构建工具,用于管理和构建软件项目。它们都可以用于自动化构建过程,但在一些方面有一些区别Makefile是一种用于构建和管理软件项目的脚本文件。它基于一组规则,指定了如何编译源代码、链接目标文件以及执行其他构建任务。Makefile通常使用make命令来解析和执行。 CMake是一个跨平台的构建工具,用于生成与操作系统和编译器无关的构建脚本。CMake使用一种称为CMakeLists.txt的文本文件来描述项目的配置和构建过程。CMake会根据CMakeLists.txt生成相应的Makefile或其他构建系统所需的文件(如Visual Studio项目文件)。 主要区别如下: 1. 语法:Makefile使用自己的特定语法,而CMake使用CMake语法,更易读和编写。 2. 平台独立性:CMake可以生成适用于不同操作系统和编译器的构建脚本,而Makefile通常是特定于Unix或类Unix系统的。 3. 可扩展性:CMake具有更强大的模块化和可扩展性,可以轻松添加自定义构建规则和功能。 4. 依赖管理:CMake可以自动处理项目的依赖关系,而Makefile需要手动指定依赖关系。 5. 集成开发环境(IDE)支持:CMake对于与各种IDE集成更加友好,可以生成适用于各种IDE的项目文件。 总的来说,Makefile更加灵活,适合简单的项目,而CMake更适合复杂的跨平台项目。选择使用哪个工具取决于项目的需求和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咖喱年糕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值