包括Windows上可能存在或不存在的标头

时间:2011-11-18 17:46:59

标签: c++ windows header conditional-compilation winapi

所以,我正在尝试处理各种版本的Windows SDK中的细微差别,但是在编译过程中我很难确定我在C ++中构建的Windows SDK的版本。

从Windows SDK的6.1版本开始,有一个WinSDKVer.h文件,其中包含一些版本信息,我可以使用这些信息来确定正在使用的SDK版本,即使它不包含该版本的直接版本号。 SDK。但是,6.0A不包含此头文件,因此只需插入#include然后使用#ifdef之类的东西就行不通,因为环境中没有WinSDKVer.h。

我的一位同事对Windows的标题进行了模糊的回忆,当且仅当它存在时,却记不清任何细节,到目前为止,我无法在stackoverflow上找到任何关于这样做的信息。互联网。

如果已经安装在开发人员的计算机上,我已经尽力完成了制作过程,试图强制使用6.1或更高版本的SDK,但是如果其他人遇到这种一般问题,我也很感兴趣之前以及是否/如何解决它。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

(丑陋)创建自己的头文件的空版本并将其放在一个文件夹上。然后在include目录中最后添加此文件夹。如果该文件存在于SDK中,则将包含该文件;否则你的文件将被使用。

答案 1 :(得分:3)

你不能在C ++级别上这样做。您可以在构建系统级别执行此操作 - 例如在SCons中看到"Checking for the Existence of Header Files"。基本思想是编译一个只包含文件的小程序,看看编译是成功还是失败。然后你可以设置一个宏,说明你是否有标题,然后执行

#ifdef HAVE_WINSDKVER_H
#    include <winsdkver.h>
#endif

或其他什么。

答案 2 :(得分:0)

通过历史版本的SDK标题进行一些深思熟虑,查找已存在于所有SDK版本中的头文件,但在不同SDK版本的#defines中包含细微变体。您可以使用#ifdef对这些进行测试,以区分SDK。

显然它必须是 WinSDKVer.h 以外的某个文件,在某些情况下,您可能需要多个文件的组合。

多年前我做过something similar for Palm OS SDKs

相关问题