一、背景和环境介绍

一般我们在`linux`使用:`cmake..; make;`命令调用gcc来编译程序,在`windows`上使用cmake的客户端生成`sln`,再启动VS读取sln编译程序。但是我要用jenkins来管理c++构建,那么就需要在windows环境也能通过命令行来调用cmake。

环境: win10虚拟机, VS2017, cmake3.19.4

二、命令行调用cmake

  1. 将cmake的可执行程序添加到系统环境变量: 设置-> 关于-> 高级系统设置-> 环境变量-> 系统变量Path中添加cmake的可执行程序所在的目录,然后一路点击确定。添加完成之后可以打开cmd窗口运行:cmake --version 检验一下是否成功。

这里是引用

  1. 创建一个build目录,命令行窗口cd到build目录下,运行以下命令:
cmake ../project -A x64

解释:
../project:这是一个目录,对应的是项目的cmakelist.txt文件所在的目录
-A x64: 生成64位程序
-G "Visual Studio 16 2019": -G可以指定生成器版本,我这里系统默认是2017,就不指定了

当出现下图中两个"done",说明cmake成功,去build目录下可以看到生成了对应的sln等一堆VS文件

在这里插入图片描述

二、命令行编译sln项目

现在已经生成了sln,可以通过VS客户端打开sln进行编译,但是我还是想继续用命令行进行编译。显然不能用make命令,因为make是对应的生成器是makefile。这里有两种方式:

(1)devenv命令

devenv是Visual Studio的命令行工具,可以用来启动Visual Studio IDE、编译解决方案。使用方式:命令行窗口cd到sln文件所在的目录,运行命令例如:

devenv MyProject.sln /build Release

(2) 使用msbuild工具

msbuild是Microsoft Build Engine的命令行工具,它可以直接编译MSBuild项目文件(如.vcxproj)和解决方案文件(.sln)。使用方式:命令行窗口cd到sln文件所在的目录,运行命令例如:

msbuild MyProject.sln /p:Configuration=Debug;Platform=x64

通常,msbuild通常比devenv更快,因为它直接调用构建引擎而不是启动整个Visual Studio IDE。我选用的是msbuild.

三、遇到的问题:“msbuild不是内部或外部命令,也不是可执行程序”

这是因为mebuid没有添加系统环境变量(devenv同样)。MSBuild通常会自动安装并随Visual Studio一起提供,可以去VS的安装目录下边找一下,我的是:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe
找到之后有两种方式使用它,
(1)直接在命令行中使用它的全路径,这里注意路径中有空格,命令行会报错如下图,那么我们用一对双引号把全路径包括起来就可以了。

这里是引用

(2)将msbuild的路径添加到系统环境变量Path中,这样就可以直接用msbuild这个命令了。注意,添加环境变量之后一定要重新打开一个命令行窗口,旧的里边不起作用

这里是引用

这里是引用

到这里就全部编译完成了,到build目录里边检查一下相应的文件夹里边已经生成了想要的结果。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐