windows上的C++编译环境
引子
昨天为了教大一的小朋友入门C++,又去折腾了下windows的环境。
windows上的开发环境,从老的到新的
- DevCpp (CCF出的一套针对初中生的编程入门书还在用这个,作为上手简化先把代码写起来的角度也能接受)
- VisualC++6.0 (学校教学居然还在用这个)
- VisualStudio 2019... (还是要体验过宇宙最强IDE)
- VSCode + CMake + MSYS2 (重点应该掌握这套)
- WSL环境(暂时不介绍,这就进入完整Linux环境了)
vscode+cmake+msys2 挺好用的。msys2现在很不错啊,内部有。mingw64, ucrt64, clang64 三个子环境可以选择。
- mingw64 = gcc + msvcrt + libstdc++ 安装后位于 c:\msys64\mingw64\ , 其实还有 mingw32 环境,忽略
- ucrt64 = gcc + ucrt + libstdc++ 安装后位于 c:\msys64\ucrt64\
- clang = clang + ucrt + libc++ 安装后位于 c:\msys64\clang64\
其中,msvcrt 和 ucrt 都是windows上的c运行时,最新的是ucrt,用msvcrt也没啥问题。
顺便简单梳理了下运行时:
- 操作系统有: windows, linux, mac
- 编译器有: msvc, gcc, clang
- c运行时库有: (msvcrt,ucrt), glibc, libsystem
- c++运行时有: msvcp..系列,libstdc++, libc++
实际上,运行时库有静态库和动态库,msvc相关的完整的应该参考:https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/crt-library-features?view=msvc-170
这里面 CMake 作为第1入门掌握是最好的,因为从 CMake的配置文件 CMakeLists.txt 可以通过 CMake -G xxx 命令生成各种不同编译环境的项目文件(例如VisualStudio解决方案)或者构建配置文件(Makefile, Ninja)。 详细支持的Generator 参考: https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html#manual:cmake-generators(7)
实际上这里还应该先大概知道这些环节,暂时先大致知道,后续再深入理解:
- 通过 cd build + cmake -G "MSYS Makefiles" .. 使用 CMakeLists.txt 生成了 build/Makefile
- 通过 cd build + cmake --build . 内部调用 make 从 Makefile 开始构建程序
- Makefile 内部实际上通过定义 tagert 和 target 的依赖,最终调用了 GCC 编译命令编译了源代码,生成了可执行文件
- 而 GCC 实际上内部调用的是 g++ 来编译 c++源代码
现代的C/C++入门应该从这些开始。
概述
Windows 上的C++编程环境比Linux上的繁杂很多,有许多工具已经很老了,但是很多教材也还在用,很多学校的教学也还在用。另一方面,有更现代的选择,但是需要一些必要的配置和对工具链组成的理解,本文将必要的环境都介绍一遍,让新手能有一个相对完整的理解,然后迅速抛弃老旧的工具链,使用更现代的工具链,同时如果学校的教学还是用老旧的工具链也能用,兼顾两者。
DevCpp
// todo
Visual C++ 6.0
// todo
Visual Studio (2019+)
// todo
Visual Studio Code + msys2
// todo
归纳1:C++工具链分层
上述几个C++的开发环境,基本的构成是下面三层
- 编译工具链(IDE)
- 编译器
- C运行时库 + C++运行时库
归纳2: 构建系统分层
编译工具链这层,内部又根据不同的环境有内部的不同组织,本质上他们最终都调用编译器来执行命令。我们以CMake的角度来看这里面的分层,因为CMake的配置可以通过指定CMake的Generator来生成其他大部分构建系统的配置或者脚本,因此CMake也叫元构建系统。
- 元构建系统:CMake
- 构建系统:Make,Ninja,VisualStudio项目配置
- 编译器:GCC,Clang
参考资料
[1] https://code.visualstudio.com/docs/cpp/config-mingw
[2] https://www.oschina.net/translate/c-c-standard-library?lang=chs&p=2
[3] https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/crt-library-features?view=msvc-170
[1] glibc: https://www.gnu.org/software/libc/
[2] libstdc++: https://gcc.gnu.org/onlinedocs/libstdc++/
[3] libc++: https://libcxx.llvm.org/
[4] cmt+msvcrt, ucrt, vcruntime, cpmt+msvcprt: https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/crt-library-features?view=msvc-170
[5] Mac下,libc是libsystem的一部分:https://www.oreilly.com/library/view/mac-os-x/0596003560/ch05s02.html
[6] https://blog.conan.io/2022/10/13/Different-flavors-Clang-compiler-Windows.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix