致命错误 C1083: 无法打开包含文件: 'Windows.h': and scons
致命错误 C1083: 无法打开包含文件: 'Windows.h': and scons
今天正式是我接触C++的第一天:P\n我已经下载了Visual C++ 2005 Express Edition和Microsoft Platform SDK for Windows Server 2003 SP1,因为我想要接触开源的Enso项目。\n因此,在安装了scons之后,我进入控制台并尝试使用scons编译它,但是出现了以下错误:\n
C:\oreyes\apps\enso\enso-read-only\src\platform\win32\Include\WinSdk.h(64) : fatal error C1083: Cannot open include file: 'Windows.h': No such file or directory scons: *** [src\platform\win32\InputManager\AsyncEventProcessorRegistry.obj] Error 2 scons: building terminated because of errors.
\n在查看了以下链接之后:\nVS ans PSDK\nInclude tiffi.h\nWndows.h\n我成功配置了我的安装环境:\n\n并且运行了这个脚本\n\n我甚至成功在IDE中编译了下面的文件。\n
// Test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #includeint _tmain(int argc, _TCHAR* argv[]) { return 0; }
\n但是我仍然在控制台中遇到了异常。有人有scons的经验吗?\n编辑\n实际上(我忘记告诉你们这个),我是通过链接“Visual Studio 2005命令提示符”来启动命令提示符的。\n我认为这将包含环境变量中的路径。但是在打印它们之后,我发现并没有:\n
echo %INCLUDE% echo %LIB% echo %PATH%
\n它们并不存在,所以我创建了这个.bat文件:\n
set PATH=%PATH%;"C:\Program Files\Microsoft Platform SDK\Bin" set INCLUDE=%INCLUDE%;"C:\ Program Files\Microsoft Platform SDK\Include" set LIB=%LIB%;"C:\ Program Files\Microsoft Platform SDK\Lib"
\n然而,scons似乎没有使用这些变量... 🙁
问题原因:无法找到Windows.h头文件。
解决方法:
1. 找到类似于c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat
的批处理文件。
2. 在Express安装文件夹中找到类似的文件。
3. 在桌面上创建一个快捷方式,目标为cmd.exe /K "c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
,并适当修改路径。
4. 通过该快捷方式打开命令提示符。
5. 在该命令提示符窗口中进行命令行构建。
这样,命令行构建就可以正常工作了。
fatal error C1083: 无法打开包括文件: 'Windows.h':and scons
问题的出现原因是需要设置包括文件路径(和可能的其他内容)。在命令行中,通常使用Visual Studio安装的一个批处理文件来完成这个任务,该文件名为vsvars32.bat
(或者为了与VC6兼容而命名为vcvars32.bat
)。
我不熟悉scons,所以不知道如何最好地为该工具配置这些设置,但是对于标准的makefile,通常在makefile中有一行代码设置一个宏变量,该变量包含包括文件目录路径,并且该宏变量会作为一个命令行参数的一部分,在调用编译器的命令中使用。
另一种可能是让scons进程调用vsvars32.bat,或者从已经使用批处理文件配置过的命令行中运行scons脚本。
简而言之,你需要将vsvars32.bat配置的内容以某种方式添加到scons的配置中。
我可以证实,这是我们团队在Windows上使用SCons时通常采用的过程。
安德鲁,你能进一步解释一下如何在scons中包含vcvars32吗?
错误原因:scons无法导入用户环境(包括PATH和其他变量),因此无法处理最新版本的SDK/VS。
解决方法1:手动将环境变量添加到scons构建过程中,可以使用env.Prepend(CPPPATH, [os.path.join(mssdk, "Include")])和env.Prepend(LIBPATH, [os.path.join(mssdk, "libpath")])将SDK路径添加到编译选项中。
解决方法2:直接将环境导入scons,可以使用env = Environment(ENV = os.environ)将当前环境导入scons,这样scons会使用shell中的任何环境修改。
通过以上方法,问题得以解决,不再出现Windows.h错误。