安装 SpiderMonkey 时未找到 Windows SDK

安装 SpiderMonkey 时未找到 Windows SDK

我正在跟进本指南安装 SpiderMokey。

我已经下载并安装了 Visual Studio Community 2015,然后重新启动。
我已经下载并安装了 MozillaBuild 包。

当我去c:\mozilla-build跑步时start-shell-msvc2015.bat,它说

MozillaBuild Install Directory: C:\mozilla-build\
Visual C++ 2015 Directory: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\

No Windows SDK found. Exiting.

Press any key to continue . . .

我希望它能找到 Windows SDK,我假设我刚刚使用 VS 2015 下载了它,但是没有。

它在寻找什么以及我如何才能得到它?

编辑2:

安装 Windows SDK 8.1 并重试后,出现此错误:

Unable to call a suitable vcvars script. Exiting.

以下是整个安装脚本:

@ECHO OFF

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

REM Reset some env vars and set some others.
SET CYGWIN=
SET INCLUDE=
SET LIB=
IF NOT DEFINED MOZ_NO_RESET_PATH (
  SET PATH=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem
)

REM mintty is available as an alternate terminal, but is not enabled by default due
REM to various usability regressions. Set USE_MINTTY to 1 to enable it.
IF NOT DEFINED USE_MINTTY (
  SET USE_MINTTY=
)

SET ERROR=
SET MOZILLABUILD=%~dp0
SET TOOLCHAIN=

REM Figure out if we're on a 32-bit or 64-bit host OS.
REM NOTE: Use IF ERRORLEVEL X to check if the last ERRORLEVEL was GEQ(greater or equal than) X.
SET WINCURVERKEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
REG QUERY "%WINCURVERKEY%" /v "ProgramFilesDir (x86)" >nul 2>nul
IF NOT ERRORLEVEL 1 (
  SET WIN64=1
) ELSE (
  REM Bail early if the x64 MSVC start script is invoked on a 32-bit host OS.
  REM Note: We explicitly aren't supporting x86->x64 cross-compiles.
  IF "%MOZ_MSVCBITS%" == "64" (
    SET ERROR=The MSVC 64-bit toolchain is not supported on a 32-bit host OS. Exiting.
    GOTO _QUIT
  )
  SET WIN64=0
)

REM Append moztools to PATH
IF "%WIN64%" == "1" (
  SET MOZ_TOOLS=%MOZILLABUILD%moztools-x64
) ELSE (
  SET MOZ_TOOLS=%MOZILLABUILD%moztools
)
SET PATH=%PATH%;%MOZ_TOOLS%\bin

REM Set up the MSVC environment if called from one of the start-shell-msvc batch files.
IF DEFINED MOZ_MSVCVERSION (
  IF NOT DEFINED VCDIR (
    REM Set the MSVC registry key.
    IF "%WIN64%" == "1" (
      SET MSVCKEY=HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%MOZ_MSVCVERSION%.0\Setup\VC
    ) ELSE (
      SET MSVCKEY=HKLM\SOFTWARE\Microsoft\VisualStudio\%MOZ_MSVCVERSION%.0\Setup\VC
    )

    REM Find the MSVC installation directory and bail if none is found.
    REG QUERY !MSVCKEY! /v ProductDir >nul 2>nul
    IF ERRORLEVEL 1 (
      SET ERROR=Microsoft Visual C++ %MOZ_MSVCYEAR% was not found. Exiting.
      GOTO _QUIT
    )
    FOR /F "tokens=2*" %%A IN ('REG QUERY !MSVCKEY! /v ProductDir') DO SET VCDIR=%%B
  )

  IF NOT DEFINED SDKDIR (
    REM Set the Windows SDK registry keys.
    SET SDKPRODUCTKEY=HKLM\SOFTWARE\Microsoft\Windows Kits\Installed Products
    SET SDKROOTKEY=HKLM\SOFTWARE\Microsoft\Windows Kits\Installed Roots
    IF "%WIN64%" == "1" (
      SET WIN81SDKKEY={5247E16E-BCF8-95AB-1653-B3F8FBF8B3F1}
    ) ELSE (
      SET WIN81SDKKEY={A1CB8286-CFB3-A985-D799-721A0F2A27F3}
    )

    REM Windows SDK 8.1
    REG QUERY "!SDKPRODUCTKEY!" /v "!WIN81SDKKEY!" >nul 2>nul
    IF NOT ERRORLEVEL 1 (
      FOR /F "tokens=2*" %%A IN ('REG QUERY "!SDKROOTKEY!" /v KitsRoot81') DO (
        REM The Installed Products key still exists even if the SDK is uninstalled.
        REM Verify that the Windows.h header exists to confirm that the SDK is installed.
        IF EXIST "%%B\Include\um\Windows.h" (
          SET SDKDIR=%%B
        )
      )

      REM Bail if no Windows SDK is found.
      IF NOT DEFINED SDKDIR (
        SET ERROR=No Windows SDK found. Exiting.
        GOTO _QUIT
      )

      SET SDKVER=8
      SET SDKMINORVER=1
    )
  )

  REM Prepend MSVC paths.
  IF "%MOZ_MSVCBITS%" == "32" (
    REM Prefer cross-compiling 32-bit builds using the 64-bit toolchain if able to do so.
    IF "%WIN64%" == "1" IF EXIST "!VCDIR!\bin\amd64_x86\vcvarsamd64_x86.bat" (
      CALL "!VCDIR!\bin\amd64_x86\vcvarsamd64_x86.bat"
      SET TOOLCHAIN=64-bit cross-compile
    )

    REM LIB will be defined if vcvarsamd64_x86.bat has already run.
    REM Fall back to vcvars32.bat if it hasn't.
    IF NOT DEFINED LIB (
      IF EXIST "!VCDIR!\bin\vcvars32.bat" (
        CALL "!VCDIR!\bin\vcvars32.bat"
        SET TOOLCHAIN=32-bit
      )
    )
  ) ELSE IF "%MOZ_MSVCBITS%" == "64" (
      IF EXIST "!VCDIR!\bin\amd64\vcvars64.bat" (
        CALL "!VCDIR!\bin\amd64\vcvars64.bat"
        SET TOOLCHAIN=64-bit
      )
  )

  REM LIB will be defined if a vcvars script has run. Bail if it isn't.
  IF NOT DEFINED LIB (
    SET ERROR=Unable to call a suitable vcvars script. Exiting.
    GOTO _QUIT
  )
)

cd "%USERPROFILE%"
IF "%USE_MINTTY%" == "1" (
  START %MOZILLABUILD%msys\bin\mintty -e %MOZILLABUILD%msys\bin\console %MOZILLABUILD%msys\bin\bash --login
) ELSE (
  %MOZILLABUILD%msys\bin\bash --login -i
)
EXIT /B

:_QUIT
ECHO MozillaBuild Install Directory: %MOZILLABUILD%
IF DEFINED VCDIR (ECHO Visual C++ %MOZ_MSVCYEAR% Directory: !VCDIR!)
IF DEFINED SDKDIR (ECHO Windows SDK Directory: !SDKDIR!)
IF DEFINED TOOLCHAIN (ECHO Trying to use the MSVC %MOZ_MSVCYEAR% !TOOLCHAIN! toolchain.)
ECHO.
ECHO %ERROR%
ECHO.
PAUSE
EXIT /B

答案1

关于第二个问题,Feugy 的答案是错误的。Visual Studio Community 2015 中有一个vcvars脚本。默认设置下 C++ 工具没有安装!请确保在安装过程中勾选它们。如果没有,您可以随时转到add or remove programs > visual studio 2015 > modify

答案2

也许你应该只安装 VS 2013 (12.0) Update 3 或更高版本。我遇到了同样的问题,我安装了 VS 2015,因为我有 VS 2013 Update 1,而 VS 2015 似乎没有 vcvars.bat 脚本。

奇怪的是 VS 2015 的 mozilla-build 脚本仍然需要这个......

安装 VS 2013 后,您可以直接进入其文件夹 \VC\bin,然后将 vcvars32.bat 复制到 VS 2015 文件夹 \VC\bin。它对我有用(编译 Firefox)

答案3

在我的 VS 2015(社区版)中,没有vcvars32.bat,但是文件夹vsvars32.bat中有一个\Common7\Tools

我已修补了mozilla-build\start-shell.bat以下内容(第 107 行):

  IF EXIST "!VCDIR!\bin\vcvars32.bat" (
    CALL "!VCDIR!\bin\vcvars32.bat"
    SET TOOLCHAIN=32-bit
  )

到:

  IF EXIST "!VCDIR!\..\Common7\Tools\vsvars32.bat" (
    CALL "!VCDIR!\..\Common7\Tools\vsvars32.bat"
    SET TOOLCHAIN=32-bit
  )

相关内容