Ubuntu 安装 CMake 构建工具
命令 sudo apt-get install cmake
用于在基于 Debian 的系统(如 Ubuntu)上安装 CMake 构建工具。这个命令将使用系统的包管理器(APT)从软件仓库中下载并安装 CMake。
执行以下步骤:
-
打开终端。
-
运行以下命令安装 CMake:
sudo apt-get update sudo apt-get install cmake
第一个命令 (
apt-get update
) 用于更新软件包列表,确保安装最新的版本。第二个命令 (apt-get install cmake
) 用于安装 CMake。 -
根据提示输入用户密码,然后按照需要确认安装。
-
安装完成后,你可以通过运行以下命令检查已安装的 CMake 版本:
cmake --version
如果安装成功,你将看到安装的 CMake 的版本信息。
这样你就成功安装了 CMake。如果你有特定的项目需要构建,接下来可以按照该项目的文档或 README 文件中的指南执行构建步骤。
Makefile 和 CMake 的区别
Makefile
和 CMake
都是用于构建项目的工具,但它们有一些区别。
Makefile:
-
语法: Makefile 使用自己的语法规则,包括规则、目标、依赖等。这是一种特定于 make 工具的语法。
-
平台依赖: Makefile 是平台相关的,同一个 Makefile 在不同的操作系统上可能需要进行修改。
-
手动维护: 对于大型项目,手动编写和维护 Makefile 可能会变得复杂,特别是在跨平台构建时。
-
编译器选项: Makefile 可以直接指定编译器和编译选项。
-
直接构建规则: Makefile 本身描述了构建规则,不需要其他工具。
CMake:
-
语法: CMake 使用一种更高级的、更简洁的语法,不同于 Makefile。它提供了更抽象的描述项目的方式。
-
平台中立: CMake 是平台中立的,可以在不同的操作系统上生成对应的本地构建文件,如 Makefile、Visual Studio 工程等。
-
自动生成: CMake 允许用户在一个 CMakeLists.txt 文件中描述项目,然后使用 CMake 工具自动生成相应的构建系统文件。
-
多编译器支持: CMake 支持多种编译器,可以在不同的编译器之间进行切换。
-
项目组织: CMake 通过目录结构来组织项目,使得项目更加模块化和可维护。
-
跨平台: CMake 使得跨平台构建更加容易,同一个 CMakeLists.txt 文件可以生成适用于不同操作系统的构建文件。
综合而言,CMake 提供了更高级、更灵活的项目描述方式,使得跨平台开发和维护更加容易。而 Makefile 更加底层,需要手动编写构建规则,适合简单的项目或对构建过程有严格要求的情况。在实际应用中,很多项目使用 CMake 作为高级构建系统,而在具体的编译时,CMake 会生成对应平台的 Makefile 或其他构建系统的文件。
特点 | Makefile | CMake |
---|---|---|
语法 | Makefile语法规则 | 高级且简洁的CMake语法 |
平台依赖 | 平台相关 | 平台中立 |
手动维护 | 手动编写和维护可能复杂 | 通过CMakeLists.txt自动生成 |
编译器选项 | 直接指定编译器和编译选项 | 更抽象,支持多种编译器 |
构建规则 | 直接描述构建规则 | 高层次描述项目结构和规则 |
自动生成 | 不支持自动生成构建文件 | 通过CMake工具自动生成构建文件 |
项目组织 | 较为平坦的结构 | 目录结构化,更模块化 |
跨平台 | 需要手动处理平台差异 | 支持跨平台构建 |
Makefile
当编写一个 Makefile 时,需要考虑项目的结构以及源代码和目标文件的分布。下面是一个简单的 Makefile 示例,假设你有一个 C 语言项目,包含两个源文件(main.c
和 functions.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提供了丰富的功能来处理这些情况。