【windows+命令行编译】在windows平台通过命令行编译--以开源软件detours为例
detours介绍
github下载后的代码目录结构如下,采用的是Makefile的形式来编译。
命令行编译
对应于Linux系统的make命令,在windows平台编译Makefile的命令为nmake
;
直接打开命令行执行nmake会报错提示找不到该命令,这是因为环境变量中没有设置nmake.exe
对应的路径。
nmake
、cl
等命令都是visual studio工具集的一部分,这里就需要了解如何通过命令行来进行编译。
怎么操作
通过命令行使用 Microsoft C++ 工具集
这里摘抄官方文档的介绍,不建议自行设置环境变量,而是建议打开已经配置好的开发人员命令提示快捷方式
MSVC 命令行工具使用 PATH、TMP、INCLUDE、LIB 和 LIBPATH 环境变量,还使用特定于已安装工具、平台和 SDK 的其他环境变量。 即使是简单 Visual Studio 安装,也可以设置二十或更多个环境变量。 这种复杂性是强烈建议使用 开发人员命令提示符快捷方式 或 自定义命令文件之一的原因。 不建议在Windows环境中自行设置这些变量。
以vs2019举例,打开开始菜单的developer command prompt for vs 2019
,再次执行nmake命令,就可以发现命令可以找到了。
和普通命令行窗口的差别
官方文档中也有描述, 可在2个命令行界面执行SET
命令,然后对比其差异, 可以看到在开发人员命令行界面中,环境变量新增了INCLUDE
、LIB
、Windows SDK
、.Net Framework
等变量。
x86 or x64
默认的命令行界面是基于x86的, 切换到detours目录下执行nmake
编译后,会发现生成的exe全部位于bin.x86
目录下,那么如何编译x64的二进制呢?
仍然以vs2019举例, 在xxx\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build
下,执行vcvars64.bat
或.\vcvarsall.bat x64
, 就可以切换到x64的编译环境。
这里实际上脚本的调用关系为:
VsDevCmd.bat位于xxx\Microsoft Visual Studio\2019\Community\Common7\Tools
路径下,默认执行该脚本就类似于打开developer command prompt for vs 2019
关于脚本之间的调用关系,这篇文档记录的比较详细深入:
记录一次在PowerShell下进入VC编译环境的探索过程
cmd or powershell
通过developer command prompt for vs 2019
打开的cmd界面,很多命令都没有,如果能在powershell下进行命令行编译会更加方便。
通过查询其他文档,发现也是有方案的,开始菜单中打开Developer PowerShell for VS 2019
就可以了,文档链接如下:
Visual Studio 开发人员命令提示和开发人员 PowerShell
但是这样仍然默认打开的是x86的编译环境,如何在powershell中编译x64的目标进程?文档中提到,需要升级到2022版本,就可以在powershell中打开x64的环境了。
& 'C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\Common7\Tools\Launch-VsDevShell.ps1' -Arch arm64 -HostArch amd64