msvc交叉编译:使用vcvarsall.bat设置命令行编译环境

来源:互联网 发布:sns软件 编辑:程序博客网 时间:2024/05/22 13:56

http://blog.csdn.net/10km/article/details/51722353

一直以来我只知道vc设置命令行编译环境的批处理命令是%VS140COMNTOOLS%/Common7/Tools下的vsvars32.bat,(%VS140COMNTOOLS%为定义vs2015公共工具程序位置的环境变量,命令行窗口输入set就能找到,vs2010的对应定义为%VS100COMNTOOLS%)
微软的官网上有这个命令的说明:
https://technet.microsoft.com/zh-cn/library/1700bbwd.aspx

但在执行这个命令生成的命令行环境下用nmake只能编译32位版本的代码,我一直都不知道如何用nmake编译64位的代码。
今天才搞明白vsvars32.bat已经过时了,正确的打开方式是vcvarsall.bat 。
至少从vs2010开始,
%VS140COMNTOOLS%/VC下就有vcvarsall.bat,用于生成命令行编译环境。
如果要在命令行生成 32位代码,就执行vcvarsall x86
如果要在32位系统下生成64位代码,就执行vcvarsall x86_amd64
如果要在64位系统下生成32位代码,就执行vcvarsall x86vcvarsall amd64_x86
到了VS2015,已经支持arm平台了,所以如果要生成arm平台的代码,就执行vcvarsall x86_arm 如果你的操作系统是64位的也可以vcvarsall amd64_arm

前面一个名字代表你的当前电脑的体系结构,后面的这个名字代表你要生成的代码的体系结构。如果两个名字一样,就简化为一个名字。
搞清楚了这个,今天终于顺利在命令行下实现nmake编译32位和64位版本代码:

生成用于编译32位代码的命令行编译环境

C:\Program Files (x86)\Microsoft Visual Studio 14.0>cd VCC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>vcvarsall x86
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

执行cmake生成NMake格式的Makefile,指定处理器为x86,然后执行nmake编译所有代码,并安装

>cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RELEASE -DTARGET_PROCESSOR=x86 ..\facecl >nmake install
  • 1
  • 2
  • 1
  • 2

安装成功的输出

Install the project...-- Install configuration: "RELEASE"-- Installing: C:/Program Files (x86)/facecl/lib/static/detect_cl.lib-- Installing: C:/Program Files (x86)/facecl/bin/detect_cl.dll-- Installing: C:/Program Files (x86)/facecl/lib/static/img_tool.lib-- Installing: C:/Program Files (x86)/facecl/bin/img_tool.dll-- Installing: C:/Program Files (x86)/facecl/bin/test_detect.exe-- Up-to-date: C:/Program Files (x86)/facecl/./README_utf8.txt-- Up-to-date: C:/Program Files (x86)/facecl/include/detect_cl_types.h-- Up-to-date: C:/Program Files (x86)/facecl/include/detect_cl.h-- Up-to-date: C:/Program Files (x86)/facecl/include/img_tool.h-- Up-to-date: C:/Program Files (x86)/facecl/sample/test_detect.cpp-- Up-to-date: C:/Program Files (x86)/facecl/sample/utility.h-- Up-to-date: C:/Program Files (x86)/facecl/sample/raii.h-- Up-to-date: C:/Program Files (x86)/facecl/sample/assert_macros.h-- Up-to-date: C:/Program Files (x86)/facecl/sample/cmdline.h-- Up-to-date: C:/Program Files (x86)/facecl/sample/dirent.h-- Up-to-date: C:/Program Files (x86)/facecl/sample/file_utilits.h-- Up-to-date: C:/Program Files (x86)/facecl/sample/time_utilits.h
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

如果要在32位系统下生成64位代码,也如法炮制

关于vcvarsall.bat更详细的说明,参见微软的官方文档:
https://msdn.microsoft.com/zh-cn/library/f2ccy3wt.aspx

------------------------------------------------------------分割线--------------------------------------------------------------------------------------------

为命令行生成设置路径和环境变量

Visual Studio 2013

Visual C++ 命令行生成工具需要多个为安装自定义的环境变量。 安装 Visual Studio 后,它将创建可设置所需环境变量的命令文件,然后创建可启动“命令提示符”窗口的快捷方式,在该窗口中这些变量已设置完毕。当你想要使用命令行工具时,可以运行这些快捷方式之一,也可以打开纯“命令提示符”窗口,然后运行 vcvarsall.bat 命令文件。

Visual C++ 命令行工具使用 PATH、TMP、INCLUDE、LIB 和 LIBPATH 环境变量,还可以使用特定于工具的环境变量。由于这些环境变量的值特定于安装,并且可能因产品更新或升级而进行更改,因此建议使用 vcvarsall.bat 或“开发人员命令提示”快捷方式,而不是由你自行设置它们。有关由编译器和链接器使用的特定环境变量的信息,请参阅CL 环境变量LINK 环境变量

说明说明

多个命令行工具或工具选项都需要管理员权限。 若要使用它们,建议通过使用“以管理员身份运行”选项(位于要打开的“命令提示符”窗口的快捷菜单上)打开“命令提示符”窗口。

使用“命令提示”快捷方式

包括在每个版本的 Visual Studio 中的“开发人员命令提示”快捷方式将打开“命令提示符”窗口,并设置环境以使用要面向 x86 处理器的 32 位 x86 本机工具集。还可以使用面向 x64 和 ARM 平台的 32 位跨编译器的命令提示符。还可以使用面向 x64 处理器的 64 位 x64 本机工具集的“命令提示”快捷方式,以及面向 x86 处理器的 64 位跨编译器的“命令提示”快捷方式,具体取决于你的系统和安装的 Visual Studio 版本。可在所有版本的 Visual Studio 中使用这些版本的命令行工具集:

x86 on x86

使用此工具集可为 x86 计算机创建输出文件。 它在 x86 计算机上和 64 位 Windows 操作系统中的 WOW64 下作为 32 位本机进程运行。

x64 on x86(x64 跨平台编译器)

使用此工具集可为 x64 创建输出文件。 它在 x86 计算机上和 64 位 Windows 操作系统中的 WOW64 下作为 32 位本机进程运行。

x86 上的 ARM(ARM 跨平台编译器)

使用此工具集可为 ARM 计算机创建输出文件。 它在 x86 计算机上和 64 位 Windows 操作系统中的 WOW64 下作为 32 位本机进程运行。

可在 64 位平台上使用这些版本的命令行工具集:

x64 上的 x86

使用此工具集可为 x86 计算机创建输出文件。 它在 64 位 Windows 操作系统上作为本机进程运行。

x64 onx64

使用此工具集可为 x64 计算机创建输出文件。 它在 64 位 Windows 操作系统上作为本机进程运行。

x64 上的 ARM(ARM 跨平台编译器)

使用此工具集可为 ARM 计算机创建输出文件。 它在 64 位 Windows 操作系统上作为 64 位本机进程运行。

打开“开发人员命令提示”窗口

  1. 在显示的 Windows 8“开始”屏幕上,键入 Visual Studio Tools。请注意,随着你的键入搜索结果将相应变化,当“Visual Studio Tools”出现时,请选择它。

    在早期版本的 Windows 上,选择“开始”,然后在搜索框中键入 Visual Studio Tools。“Visual Studio Tools”出现在搜索结果中时,请选择它。

  2. “Visual Studio Tools”文件夹中,打开适用于你的 Visual Studio 版本的“开发人员命令提示”(若要以管理员身份运行,请打开“开发人员命令提示”的快捷菜单,然后选择“以管理员身份运行”。)

“开发人员命令提示”将设置环境以使用要面向 x86 处理器的 32 位本机工具集。 选择“x64 兼容工具命令提示”以使用要面向 x64 处理器的 32 位本机工具集。选择“ARM 兼容工具命令提示”以使用要面向 ARM 处理器的 32 位本机工具集。选择“x64 本机工具命令提示”以使用要面向 x64 处理器的 64 位本机工具集。

在“命令提示符”窗口中使用 vcvarsall.bat

通过在纯“命令提示符”窗口中运行 vcvarsall.bat,可设置环境变量以配置适用于 32 位或 64 位本机编译的命令行,或适用于面向 x86、x64 或 ARM 处理器的交叉编译的命令行。如果未提供任何参数,vcvarsall.bat 将配置环境变量以供使用面向 x86 的 32 位本机编译器。但是,你可以用该编译器来配置所有的编译器。如果指定在生成计算机体系结构上未安装或不可用的编译器配置,将会显示一条消息。 下表显示了支持的参数

Vcvarsall.bat 参数

编译器

生成计算机体系结构

生成输出体系结构

x86

x86 32 位本机

x86, x64

x86

x86_amd64

x86 跨平台上的 x64

x86, x64

x64

x86_arm

x86 跨平台上的 ARM

x86, x64

ARM

amd64

x64 64 位本机编译器

x64

x64

amd64_x86

x64 跨平台上的 x86

x64

x86

amd64_arm

x64 跨平台上的 ARM

x64

ARM

以下步骤显示如何配置“命令提示”,以使用要面向 x86 平台的 32 位本机工具集。

运行 vcvarsall.bat

  1. 在命令提示符下,更改到 Visual C++ 安装目录。 (该位置取决于系统和 Visual Studio 安装,但典型位置是 C:\Program Files (x86)\Microsoft Visual Studioversion\VC\。)例如,输入:

    cd "\Program Files (x86)\Microsoft Visual Studio 12.0\VC"

  2. 若要为 32 位 x86 命令行生成配置此“命令提示符”窗口,请在命令提示符下,输入:

    vcvarsall x86

Visual Studio 还提供 vcvars32.bat 来设置命令行环境。 vcvars32.bat 文件仅限于设置适当的环境变量,以启用 32 位 x86 命令行生成。它与 vcvarsall x86 命令等效。

如果你要将 DEVENV 用于命令行生成,除非还指定了 /useenv 选项,否则由 vcvarsall.bat 或 vcvars32.bat 设置的环境不会对你的生成产生任何影响。

警告说明警告

vcvarsall.bat 文件在不同的计算机中会有所不同。 不要使用另一台计算机中的文件替换丢失或损坏的 vcvarsall.bat 文件。重新运行 Visual Studio 安装程序以替换丢失的文件。

vcvarsall.bat 文件在不同的版本中也会有所不同。 如果安装 Visual C++ 的当前版本的计算机上也安装有 Visual C++ 的早期版本,则不要在同一“命令提示符”窗口中运行来自不同版本的 vcvarsall.bat 或 vcvars32.bat。


0 0