幻灰龙
23-10-05 14:55

昨天为了教大一的小朋友入门C++,又去折腾了下windows的环境。已经很久没用windows 环境了。

windows上的C++开发环境,从老的到新的
1) DevCpp (CCF出的一套针对初中生的编程入门书还在用这个,一开始作为上手简化先把代码写起来的角度也能接受介绍给小朋友,但是昨天给过了下已经敲了的代码,还是各种陈旧的风格和不好的习惯,我给作为反例系统说了一遍,编教程一开始就拒绝不好的风格和代码有那么难么?)
2) VisualC++6.0 (学校教学居然还在用这个,作为古董了解下也无不可)
3) VisualStudio 2019... (还是要体验过宇宙最强IDE)
4)VSCode + CMake + MSYS2 (重点应该掌握这套)
5) WSL环境(暂时不介绍,这就进入完整Linux环境了)

vscode+cmake+msys2 挺好用的。msys2现在很不错啊,内部有。mingw64, ucrt64, clang64 三个子环境可以选择。

1) mingw64 = gcc + msvcrt + libstdc++ 安装后位于 c:\msys64\mingw64\ , 其实还有 mingw32 环境,忽略
2) ucrt64 = gcc + ucrt + libstdc++ 安装后位于 c:\msys64\ucrt64\
3) clang = clang + ucrt + libc++ 安装后位于 c:\msys64\clang64\

其中,msvcrt 和 ucrt 都是windows上的c运行时,最新的是ucrt,用msvcrt也没啥问题。

顺便简单梳理了下运行时:

1) 操作系统有: windows, linux, mac
2) 编译器有: msvc, gcc, clang
3) c运行时库有: (msvcrt,ucrt), glibc, libsystem
4) c++运行时有: msvcp..系列,libstdc++, libc++

实际上,运行时库有静态库和动态库,msvc相关的完整的应该参考: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 参考: cmake.org/cmake/help/latest/manual/cmake-generators.7.html#manual:cmake-generators(7)

实际上这里还应该先大概知道这些环节,暂时先大致知道,后续再深入理解:

1) 通过 cd build + cmake -G "MSYS Makefiles" .. 使用 CMakeLists.txt 生成了 build/Makefile
2) 通过 cd build + cmake --build . 内部调用 make 从 Makefile 开始构建程序
3)Makefile 内部实际上通过定义 tagert 和 target 的依赖,最终调用了 GCC 编译命令编译了源代码,生成了可执行文件
4)而 GCC 实际上内部调用的是 g++ 来编译 c++源代码

现代的C/C++入门应该从这些开始。

参考资料1:
[1] glibc: www.gnu.org/software/libc/
[2] cmt+msvcrt, ucrt, vcruntime, cpmt+msvcprt: learn.microsoft.com/zh-cn/cpp/c-runtime-library/crt-library-features?view=msvc-170
[3] Mac下,libc是libsystem的一部分:www.oreilly.com/library/view/mac-os-x/0596003560/ch05s02.html

参考资料2:
[1] libstdc++: gcc.gnu.org/onlinedocs/libstdc++/
[2] libc++: libcxx.llvm.org/

参考资料3:
[1] code.visualstudio.com/docs/cpp/config-mingw
[2] www.msys2.org/
[3] www.msys2.org/docs/cmake/
[4] cmake.org/cmake/help/latest/manual/cmake-generators.7.html#manual:cmake-generators(7)

--end--

发布于 福建