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

我已经下载了适用于Windows Server 2003 SP1的Visual C ++ 2005 Express Edition和Microsoft Platform SDK,因为我想了解开源恩索项目

所以,在安装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

Wndows .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似乎不接受变种...... :(

有帮助吗?

解决方案

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

我是scons的偶尔撰稿人,我正在研究这个功能ATM。希望它很快会被包含在scons中,但是这个功能比我的预期更难实现,部分原因是每个sdk /编译器组合都不同(有时甚至MS都没有正确使用它们的一些.bat文件坏了),所以我不能给你约会。我希望它将被包含在1.2中(将在大约一个月内发布)。

其他提示

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

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

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

简而言之,你需要以某种方式将vsvars32.bat配置到scons配置中。

将有一个与此类似的批处理文件(对于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提示

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

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

当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(';'))

使用命令行提示符编译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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top