windows系统通过命令行调用cmake和vs编译c++项目
一般我们在`linux`使用:`cmake..;make;`命令调用gcc来编译程序,在`windows`上使用cmake的客户端生成`sln`,再启动VS读取sln编译程序。但是我要用jenkins来管理c++构建,那么就需要在windows环境也能通过命令行来调用cmake。环境: win10虚拟机, VS2017,cmake3.19.4。
一、背景和环境介绍
一般我们在`linux`使用:`cmake..; make;`命令调用gcc来编译程序,在`windows`上使用cmake的客户端生成`sln`,再启动VS读取sln编译程序。但是我要用jenkins来管理c++构建,那么就需要在windows环境也能通过命令行来调用cmake。
环境: win10虚拟机, VS2017, cmake3.19.4
二、命令行调用cmake
- 将cmake的可执行程序添加到系统环境变量: 设置-> 关于-> 高级系统设置-> 环境变量-> 系统变量Path中添加cmake的可执行程序所在的目录,然后一路点击确定。添加完成之后可以打开cmd窗口运行:
cmake --version
检验一下是否成功。
- 创建一个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目录里边检查一下相应的文件夹里边已经生成了想要的结果。
更多推荐
所有评论(0)