今天正式是C ++的第一天:P
我已经下载了适用于Windows Server 2003 SP1的Visual C ++ 2005 Express Edition和Microsoft Platform SDK,因为我想了解开源Enso Project。
所以,在安装scons之后我去了控制台并尝试使用scons编译它,但是我收到了这个错误:
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.
检查这些链接后:
我已成功配置我的安装:
甚至运行此脚本
我设法在IDE中编译下面的文件。
// Test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
但我仍然在控制台中获得该异常。有没有人有scons经验?
修改
实际上(我忘了告诉你)我使用“Visual Studio 2005命令提示符”链接启动了命令提示符。
我假设这将包括环境变量中的路径。打印后我发现它没有:
echo %INCLUDE%
echo %LIB%
echo %PATH%
他们不在场,所以我创建了这个.bat文件:
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"
仍然,scons似乎不接受变种...... :(
答案 0 :(得分:8)
使用上述建议不适用于scons:scons不会导入用户环境(PATH和其他变量)。根本问题是scons不处理最新版本的SDKs / VS.
我是scons的偶尔撰稿人,我正在研究这个功能ATM。希望它很快会被包含在scons中,但是这个功能比我的预期更难实现,部分原因是每个sdk /编译器组合都不同(有时甚至MS都没有正确使用它们的一些.bat文件坏了),所以我不能给你约会。我希望它将被包含在1.2中(将在大约一个月内发布)。
答案 1 :(得分:3)
您需要设置包含文件路径(以及可能的其他内容)。在命令行,这通常使用Visual Studio安装的名为vsvars32.bat
的批处理文件(或vcvars32.bat
与VC6兼容)来完成。
我不熟悉scons所以我不知道为该工具配置这些设置的最佳方法,但对于标准makefile,makefile中通常有一行用include目录路径设置一个宏变量,该宏用作调用编译器的命令中命令行参数的一部分。
另一种可能性是让scons进程调用vsvars32.bat或从已使用批处理文件配置的命令行运行scons脚本。
简而言之,你需要以某种方式将vsvars32.bat配置到scons配置中。
答案 2 :(得分:2)
将有一个与此类似的批处理文件(对于MSVC 2005)设置环境变量:
c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat
第1步:在Express安装文件夹中找到类似的文件
第2步:在桌面上创建一个快捷方式,其中包含这些目标详细信息和经过适当修改的路径:
cmd.exe /K "c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
第3步:通过此快捷方式打开DOS提示
命令行构建现在应该在此控制台窗口中工作。
答案 3 :(得分:0)
您向我们展示了如何在Visual Studio中为Visual Studio配置Visual Studio,但您没有向我们展示您尝试过的命令行环境。对不起,我没有尝试过Express版本,所以我不知道他们是否创建了Pro等上面的其他“开始”菜单快捷方式。如果打开一个合适的命令提示符,并且已经设置了环境变量,那么可以在命令行上进行编译。否则,每次打开命令提示符时,您必须自己设置变量或执行批处理脚本来设置它们。
答案 4 :(得分:0)
当scons自动执行此操作时会很好。现在,我使用它(从SDK命令提示符运行,如果在vsvars32.bat之后运行则不确定是否存在差异):
import os
env = Environment(ENV={'PATH': os.environ['PATH']})
env['ENV']['TMP'] = os.environ['TMP']
env.AppendUnique(CPPPATH=os.environ['INCLUDE'].split(';'))
env.AppendUnique(LIBPATH=os.environ['LIB'].split(';'))
答案 5 :(得分:0)
使用命令行提示符编译wxwidgets与Visual C ++ 2005 Express时,这对我有用:
REM Fix Error error C1083 'windows.h'
(编译时使用/ useenv选项。)
set PDSKWIN=C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2
(更改为右侧。)
set INCLUDE=%PDSKWIN%\Include;%INCLUDE%
set LIB=%PDSKWIN%\Lib;%LIB%
然后我在编译时使用这一行。我相信只需将/useenv
添加到您的行中,一切都应该正常工作:
vcbuild /useenv /nohtmllog /nologo name.proj (or any file to compile)