vscode cmake-tools 的作用,以及和cmake的联系

vscode cmake-tools 的作用,以及和cmake的联系

camke toolsvscode 中的一个插件,顾明思意,它和cmake有关,他是vscode中编译工程的工具。

linux中使用cmake编译工程的一般过程

在Linux中,一般的构建工程是直接使用cmake,通过cmake调用cmakelist.txt文件,生成makefile文件(Generator),然后通过make命令调用makefile(generator)进行build,生成库文件、可执行文件,如果需要将库文件和头文件安装到特定目录(需要在cmakelist.txt中配置目标以及安装路径)可以执行install命令。

vscode and cmake

vscode中没有直接使用cmake,而是在cmake之上再构建了一个工具,也就是cmake tools,再使用cmake tools之前需要在vscode中指定一个kits(套件), kit 代表toolchain: A set of compilers, linkers, or other tools that will be used to build a project.
首先kit(kit 有配置文件)确定了toolchain,并且kit会生成一个工具链文件,这个工具链文件指导cmake tools(应该是cmake tools读取工具链文件)调用cmake,选择合适generator(在Ubuntu中一般是makefile),进行configuration即根据cmakelist.txt生成makefile。最后build即根据makefile生成库文件、可执行文件的过程。

vscode

vscode 的cmake tools总是configure第一个目录,就是:在工作空间中,包含多个projects,cmake tools总是对第一个project进行
configure,而不是对正在编的那个project进行configure。解决办法是将需要configureproject拖拽到第一个。

makefile xcode Ninja .sln & g++ Visual C++ MSBuild

vscode可以在Windows Linux中运行,因此在configure project的时候,vscode会考虑MSBuild即使用visual c++ compiler进行编
译,因此在cmake tools会主动检测系统的编译器,如果采用visual c++ compiler则会采用.sln generator(vs 中的解决方案文件),
如果当前系统是在macos,那么generator就是xcode,在linux/unix平台,generator就是makefile.Ninja也是一个generator.
因此cmake可以跨平台的原因就在这里。g++ Visual-C++是两个编译器,一个是开源的,一个是微软的。

图例

**fig1:cmake tools configure and build**

**fig2:kits configuration**
注:做个笔记,个人愚见,高手绕行