Visual studio 检测<;sdkddkver.h>;及<;winapifamily.h>;从开发者命令提示符?

Visual studio 检测<;sdkddkver.h>;及<;winapifamily.h>;从开发者命令提示符?,visual-studio,winapi,sdk,header-files,nmake,Visual Studio,Winapi,Sdk,Header Files,Nmake,我们有一个在Visual Studio下帮助进行测试的工具,包括Visual Studio.Net/2002到Visual Studio 2015。生成文件: 它在以后的Visual Studio下工作得很好,比如2015 Developer命令提示符,因为SDK总是提供和。在Windows 7上的Visual Studio 2008或在Windows Vista上的Visual Studio 2005下进行的测试并不顺利: > nmake /f cryptest.nmake cl.ex

我们有一个在Visual Studio下帮助进行测试的工具,包括Visual Studio.Net/2002到Visual Studio 2015。生成文件:

它在以后的Visual Studio下工作得很好,比如2015 Developer命令提示符,因为SDK总是提供
。在Windows 7上的Visual Studio 2008或在Windows Vista上的Visual Studio 2005下进行的测试并不顺利:

> nmake /f cryptest.nmake

cl.exe /nologo /D_MBCS /Zi /TP /GR /EHsc /MD /FI sdkddkver.h /FI winapifamily.h /Yc"pch.h" /Fp"pch.pch" /c pch.cpp
pch.cpp
pch.cpp : fatal error C1083: Cannot open include file: 'winapifamily.h': No such
 file or directory
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\
VC\BIN\cl.exe"' : return code '0x2'
Stop.
我们希望根据
的可用性来保护部队。我用
set
检查了环境,用
Nmake-p
检查了Nmake的环境,但是没有任何东西向我跳出来

我们如何检测Visual Studio Developer命令提示符中的
何时可用


这是前面的步骤。我认为以下是类似或相关的问题,但它们假设我们试图检测的文件已经存在:


在VS2015下进行测试时,我知道有两种尝试不起作用:

# Both WindowsSdkDir and WindowsSdkVersion are defined in environment
!IF "$(WindowsSdkDir)" != "" || "$(WindowsSdkVersion)" != ""
CXXFLAGS = $(CXXFLAGS) /FI sdkddkver.h
!ENDIF
以及:


我想我可以为
提供部分答案。我没有一个解决
问题的方法可以给我带来很多自信

这里有两种尝试,我知道在以下条件下测试时不起作用 VS2015:

# Both WindowsSdkDir and WindowsSdkVersion are defined in environment
!IF "$(WindowsSdkDir)" != "" || "$(WindowsSdkVersion)" != ""
CXXFLAGS = $(CXXFLAGS) /FI sdkddkver.h
!ENDIF
当作为Nmake宏可用时,环境变量似乎已转换为大写,因此以下操作按预期进行:

!IF "$(WINDOWSSDKDIR)" != "" || "$(WINDOWSSDKLIBVERSION)" != ""
CXXFLAGS = $(CXXFLAGS) /FI sdkddkver.h
!ENDIF

以下是
的部分解决方案。Windows Phone 8和Windows 10也可以。但在安装了VisualStudio和SDK的Windows8周围有一个死区。死区是指无法确定
是否可用:

!IF "$(WINDOWSPHONEKITDIR)" != "" || "$(UNIVERSALCRTSDKDIR)" != "" || "$(UCRTVERSION)" != ""
CXXFLAGS = $(CXXFLAGS) /FI winapifamily.h
!ENDIF
!IF "$(WINDOWSSDKDIR)" != "" || "$(WINDOWSSDKLIBVERSION)" != ""
CXXFLAGS = $(CXXFLAGS) /FI sdkddkver.h
!ENDIF
!IF "$(WINDOWSPHONEKITDIR)" != "" || "$(UNIVERSALCRTSDKDIR)" != "" || "$(UCRTVERSION)" != ""
CXXFLAGS = $(CXXFLAGS) /FI winapifamily.h
!ENDIF