准备编译环境

最后的阻拦

如果你还没有意识到C++有多麻烦,这一篇会让你认识到这一点,如果你无法完整这一篇的教学内容,那你现在推出还没有任何损失
C++需要开发者从零构建和管理自己的项目,如果你是新手,那就请在我的指引下,配合AI来搭建并运行你的第一个C++程序

你需要准备的东西

如果前面的内容你都没看,那这里将为你列出你需要准备的所有东西,接下来我会给出选择他们的原因
使用Linux操作系十分主要,很多C++程序都需要运行在Linux系统,甚至是跨平台的同时运行在Linux和Windows之中,需要你提前掌握
使用VSCode编辑器是因为C++没有太好的IDE工具,VSCode提供的插件也足以让你轻松编写代码,因为C++没有官方项目管理工具,需要你自己管理项目,所以就算使用所谓的IDE工具最后依旧要面对这个问题,建议从入门就开始管理你的项目
CMake编译是跨平台的,而且是C++项目中广泛使用的编译工具,这一点很主要,即使你不用也要会看懂,那为什么不一开始就掌握,虽然CMake有很多缺点,但也是C++能找到的最好编译工具

环境准备
1.Google浏览器(可以访问外网)
2.AI大模型(可以回答编程相关问题)
3.Linux操作系统(可以简单使用)
4.VSCode编辑器(用于编写代码)
5.G++编译器(用于在Linux上编译C++代码)
6.CMake工具(用于管理编译C++代码方式)

项目的起点

在创建项目之前,你需要问自己为什么创建这个项目,这是一个通用的思想
以我出发,我选择的是 mcpp 这个项目名称,意味“我的C++”含义是以自己为出发点的C++教学项目,我会以这个名称规则命名我的项目以及函数名称等
良好的项目名称是 编程规范 的重要一步
项目名称,是编程规范的起点,项目名称会影响到包括项目中函数/类/命名空间等,各类自定义命名的命名规范,在项目中良好的命名规范十分重要

项目结构
mcpp
.
├── CMakeLists.txt
└── main.cpp

这是第一个程序的项目结构,非常简单也非常关键
创建的mcpp项目文件夹中,存在两个文件,你可以从这个项目结构中理解C++程序的构建过程
main.cpp 是C++语言的文件命名规则,以 .cpp 为后缀,是编写C++代码逻辑的地方
CMakeLists.txt 是CMake的编译文件,用于编译一整个项目,是编写项目编译规则的地方

第一个程序代码

main.cpp
int main(int argc, char **argv)
{
    return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 4.0)
project(mcpp LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_BUILD_TYPE "Debug")

add_executable(${CMAKE_PROJECT_NAME} main.cpp)

你可以使用AI来分析并理解这两段代码
main.cpp 文件中是最小的C++代码,是可编译和运行的
CMakeLists.txt 文件中出现了 “11” 字样,没错使用的正是C++11标准,出现了 “main.cpp” 字样,表示编译的文件是 “main.cpp”,这是他们之间的关联
C++11是现代编程的起点,也是必须要学习的版本,尽管新标准已经到C++26,现在依旧有大部分项目建立在此基础之上,这是最佳入门版本

格式化代码
Ctrl + A    // 全选
Ctrl + K    // 格式化

编写完代码之后,还有一个更重要的事情,许多新手编写的代码乱糟糟的,可以说是惨不忍睹,完全让人看不懂在写什么,所以需要格式化代码,让代码保持整洁有序,上面是VSCode的 全选 + 格式化代码 快捷键
保持代码整洁是 编程规范 的重要一步

编译并运行

在编写完成上面的两个文件之后,我们需要编译代码成为可执行文件,首选需要确保终端(terminal)所在的目录是mcpp,即项目的根目录,然后执行命令

执行命令
mkdir build
cd build
cmake ..
cmake --build .
./mcpp
命令解析
1.在mcpp目录下创建build目录
2.进入build目录
3.使用CMake选择CMakeLists.txt文件位置,并根据文件生成系统Makefile
4.执行Makefile编译程序,编译完成会根据Makefile生成mcpp文件
5.执行mcpp可执行文件

如果没有任何错误,恭喜你成功运行了你的程序,第一个C++程序中的代码并没有任何内容,没有任何惊喜,也不会打印经典的 hello world 这是下一课的内容,请接收这枯燥的一幕,这是开发者必须面对的问题

编译后项目结构
mcpp
.
├── build
│   └── mcpp
├── CMakeLists.txt
└── main.cpp

在编译完成之后,会创建出build/mcpp这个可执行文件,我们执行的就是这个可执行程序,也是main.cpp代码文件最后生成的运行结果
到这里,我们学习了如何将C++代码编译为可执行文件,其中编译过程涉及到很多细节,这些细节也十分重要,你可以去了解编译方面的更多知识,但这一点不妨碍对后续内容的理解

跟随我的脚步

在例子中,编译和运行可执行都很麻烦,这也是C++的缺点之一,如果你还不熟悉这些操作,那么我建议先使用命令行运行代码,有利于了解编译流程
当然,我在Github上提供了完整的项目,以及搭建了一键运行的环境,无需通过命令行执行命令,可以直接在VSCode上直接运行代码示例,省去了大部分繁琐的步骤,如果你感兴趣可以学习并使用
上面的项目结构和编译文件是我单开的项目,不是 mcpp 项目的实际项目结构,下面我将给出 mcpp 的实际项目结构和编译文件
接下来的教学都会以 mcpp 项目出发,请你掌握 mcpp 的编译规则以方便后续的学习

项目结构
mcpp
.
├── bash
├── doc
├── example
│   ├── 01
│   │   ├── build
│   │   │   └── mcpp
│   │   └── main.cpp
│   ├── 02
│   │   ├── build
│   │   │   └── mcpp
│   │   └── main.cpp
│   ├── CMakeLists.txt
│   └── run.sh
└── README.md

可以看到,mcpp 本身是一个教学项目,所有的示例代码都在 example 文件夹下,而且存在 01 02 等没有含义的名称,这是不得已而为之,这是些文件夹命名以文章相关,本篇文章所采用的代码就是 01/main.cpp 的代码文件,文章存放在 doc 文件夹,他们的关联会在 README.md 文件的目录中体现
其中 01/main.cpp 生成的 01/build/mcpp 是可执行文件,每一个目录下都有独立的 mcpp 可执行文件,01 02 文件夹两者的 mcpp 可执行文件没有任何关联,可以看作是完全独立的项目代码

CMakeLists.txt
# 设置最小版本
cmake_minimum_required(VERSION 4.0)

# 设置项目名称
project(mcpp LANGUAGES CXX)

# 设置C++版本
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 设置调试模式
set(CMAKE_BUILD_TYPE "Debug")

# 设置源文件
if(ALL OR DIR01)
    set(SRC_FILES
        01/main.cpp
    )
endif()

if(ALL OR DIR02)
    set(SRC_FILES
        02/main.cpp
    )
endif()

# 生成可执行程序
add_executable(${CMAKE_PROJECT_NAME} ${SRC_FILES})

这是 mcpp 项目的 CMakeLists.txt 文件,可以看出这个编译文件在不同的参数 DIR01 DIR02 下会编译不同目录的文件,来达到一个编译多个可执行文件的目的
这其实是不好的操作,应该单独的在 01 02 目录下编写 CMakeLists.txt 子编译文件,但 mcpp 项目并不复杂才决定偷懒的使用一个 CMakeLists.txt 控制所有代码文件编译流程
你可以去了解编译相关的知识,让你进一步理解项目编译

VSCode插件安装

C/C++
C/C++ Extension Pack
CMake Tools

上面是必须要安装的插件,VSCode需要安装插件才能正常编写C++代码,否则无法补全代码,无法高亮显示关键字等,会导致无法正常编码

更新声明

文章会总是会第一时间更新到Github项目路径中,再同步到其他平台,如果你知道到最新消息,可以关注该项目

项目路径

https://github.com/HellowAmy/mcpp.git
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐