9

今天是我正式使用 C++ 的第一天 :P

我已经下载了 Visual C++ 2005 Express Edition 和 Microsoft Platform SDK for Windows Server 2003 SP1,因为我想接触开源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.

检查这些链接后:

VS ans PSDK

包括 tiffi.h

窗口.h

我设法像这样配置我的安装:

替代文字

甚至运行这个脚本

替代文字

我设法在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 似乎不接受 vars ... :(

4

6 回答 6

8

使用上述建议不适用于 scons:scons 不会导入用户环境(PATH 和其他变量)。根本问题是 scons 不处理最新版本的 SDKs/VS 。

我是 scons 的偶尔贡献者,并且正在开发这个功能 ATM。希望它很快会包含在 scons 中,但该功能比我最初预期的要可靠地实现要困难得多,部分原因是每个 sdk/编译器组合都是不同的(有时甚至 MS 都不正确,他们的一些 .bat 文件坏了),所以我不能给你约会。我希望它会包含在 1.2 中(大约一个月内发布)。

于 2008-10-17T05:54:18.187 回答
3

您需要设置包含文件路径(可能还有其他内容)。在命令行中,这通常使用 Visual Studio 安装的批处理文件vsvars32.bat(或vcvars32.bat为了与 VC6 兼容)来完成。

我不熟悉 scons 所以我不知道为该工具配置这些设置的最佳方法,但对于标准 makefile,makefile 中通常有一行设置包含目录路径的宏变量,该宏是在调用编译器的命令中用作命令行参数的一部分。

另一种可能是让 scons 进程调用 vsvars32.bat 或从已使用批处理文件配置的命令行运行 scons 脚本。

简而言之,您需要以某种方式将 vsvars32.bat 配置的内容放入 scons 配置中。

于 2008-10-17T04:56:43.700 回答
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 提示符

命令行构建现在应该在此控制台窗口中工作。

于 2008-10-17T05:33:13.283 回答
0

您向我们展示了如何配置 Visual Studio 以在 Visual Studio 中进行编译,但您没有向我们展示您尝试过的命令行环境。抱歉,我没有尝试过 Express 版本,所以我不知道他们是否会创建额外的开始菜单快捷方式,如 Pro 及以上版本。如果您打开一个已经设置了环境变量的合适的命令提示符,那么您可以在命令行上进行编译。否则,每次打开命令提示符时,您都必须自己设置变量或执行批处理脚本来设置它们。

于 2008-10-17T04:08:49.197 回答
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(';'))
于 2008-11-21T20:02:03.530 回答
0

在使用命令行提示符使用 Visual C++ 2005 Express 编译 wxwidgets 时,这对我有用:

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)
于 2009-02-09T13:36:47.910 回答