惊雷无声 发表于 昨天 08:19

CMake和make的理解

cmake 和 make 是在 C/C++ 项目构建过程中常用的工具,它们通常配合使用来完成从源代码到可执行文件的编译过程,下面为你详细介绍它们的执行过程。
cmake 执行过程

cmake 是一个跨平台的构建工具,它使用 CMakeLists.txt 文件来形貌项目的构建过程,终极生成得当特定平台和编译器的构建文件(如 Makefile、Visual Studio 项目文件等)。其执行过程如下:
1. 读取 CMakeLists.txt 文件

cmake 会从指定的源目录(通常是项目根目录)中读取 CMakeLists.txt 文件。该文件包含了项目的配置信息,例如项目名称、源文件列表、依赖库、编译选项等。
2. 剖析配置信息

cmake 会逐行剖析 CMakeLists.txt 中的下令和指令,根据这些信息来确定项目的构建规则。在剖析过程中,cmake 会查找所需的依赖项,例如其他库文件、头文件目录等。如果依赖项缺失,大概会导致配置失败。
3. 生成构建文件

根据剖析得到的配置信息和当前平台的特性,cmake 会生成相应的构建文件。在 Unix-like 系统中,通常生成的是 Makefile;在 Windows 系统中,大概生成 Visual Studio 项目文件。生成的构建文件会被放置在指定的构建目录中。
4. 配置完成

当 cmake 乐成生成构建文件后,会输出配置完成的信息,并提示可以使用相应的构建工具(如 make)来举行编译。
make 执行过程

make 是一个基于依赖关系的编译工具,它根据 Makefile 中界说的规则来决定哪些文件需要重新编译,从而提高编译效率。其执行过程如下:
1. 读取 Makefile 文件

make 会在当前目录下查找 Makefile 文件(如果指定了其他文件名,也可以读取其他文件),并剖析此中的规则和依赖关系。
2. 确定目标

当执行 make 下令时,可以指定一个或多个目标(target)。如果没有指定目标,make 会默认执行 Makefile 中的第一个目标。目标通常表现要生成的文件,如可执行文件、库文件等。
3. 检查依赖关系

make 会检查目标文件的依赖关系,即哪些文件的修改会影响目标文件的生成。如果某个依赖文件的修改时间晚于目标文件的修改时间,或者目标文件不存在,make 会以为该目标需要重新生成。
4. 执行下令

对于需要重新生成的目标,make 会执行 Makefile 中界说的相应下令。这些下令通常是编译器下令,用于将源文件编译成目标文件,然后将目标文件链接成可执行文件或库文件。
5. 完成编译

当全部目标都被处理完毕后,make 会输出编译完成的信息,此时项目的可执行文件或库文件就生成了。
# 创建项目目录
mkdir my_project
cd my_project

# 创建源文件
touch main.cpp
echo '#include <iostream>
int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}' > main.cpp

# 创建 CMakeLists.txt 文件
touch CMakeLists.txt
echo 'cmake_minimum_required(VERSION 3.10)
project(MyProject)
add_executable(my_program main.cpp)' > CMakeLists.txt

# 创建构建目录
mkdir build
cd build

# 执行 cmake 命令,指定源目录为上一级目录
cmake ..

# 执行 make 命令进行编译
make在上述示例中,起首创建了一个简朴的 C++ 项目,包含一个源文件 main.cpp 和一个 CMakeLists.txt 文件。然后创建了一个构建目录 build,在该目录下执行 cmake .. 下令生成 Makefile,最后执行 make 下令举行编译,生成可执行文件 my_program。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: CMake和make的理解