我们有一个Nmake-based makefile来帮助在Visual Studio下进行测试,包括Visual Studio .Net / 2002到Visual Studio 2015.makefile includes the following:
CXXFLAGS = /nologo /W4 /wd4511 /D_MBCS /Zi /TP /GR /EHsc /MD /FI sdkddkver.h /FI winapifamily.h
LDFLAGS = /nologo /SUBSYSTEM:CONSOLE
ARFLAGS = /nologo
LDLIBS =
它在后来的Visual Studios中很有用,比如2015 Developer Command提示符,因为SDK中始终提供<sdkddkver.h>
和<winapifamily.h>
。在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.
我们希望根据<sdkddkver.h>
和<winapifamily.h>
的可用性来保护强制包含。我使用set
和Nmake的环境nmake -p
检查了环境,但没有任何内容向我跳出来。
我们如何检测Visual Studio Developer命令提示符中何时可以使用<sdkddkver.h>
和<winapifamily.h>
?
这是 Platform defined macros for windows store app之前的步骤。我认为以下是相似或相关的问题,但他们假设我们试图检测的文件已经存在:
在VS2015下测试时,我知道不的两次尝试:
# Both WindowsSdkDir and WindowsSdkVersion are defined in environment
!IF "$(WindowsSdkDir)" != "" || "$(WindowsSdkVersion)" != ""
CXXFLAGS = $(CXXFLAGS) /FI sdkddkver.h
!ENDIF
和
!IF EXIST(sdkddkver.h)
CXXFLAGS = $(CXXFLAGS) /FI sdkddkver.h
!ENDIF
答案 0 :(得分:0)
我想我可以为<sdkddkver.h>
提供部分答案。我没有<winapifamily.h>
的解决方案,可以给人很大的信心。
以下两次尝试我知道在测试时不起作用 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
以下是<winapifamily.h>
的部分解决方案。它适用于Windows Phone 8和Windows 10.但是它在安装了Visual Studio和SDK的Windows 8周围有一个死区。死区是无法确定<winapifamily.h>
是否可用:
!IF "$(WINDOWSPHONEKITDIR)" != "" || "$(UNIVERSALCRTSDKDIR)" != "" || "$(UCRTVERSION)" != ""
CXXFLAGS = $(CXXFLAGS) /FI winapifamily.h
!ENDIF