2008-10-17 64 views
8

今天正式成爲我的第一天,與C++:P致命錯誤C1083:無法打開包含文件: 'WINDOWS.H':和scons的

我下載的Visual C++ 2005 Express版本和Microsoft平臺SDK的Windows服務器2003 SP1,因爲我想要開放源碼Enso Project

因此,在安裝使用SCons後我去到控制檯,並嘗試使用scons的編譯它,但我得到這個錯誤:

VS ans PSDK

Include tiffi.h

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. 

檢查這些鏈接後

Wndows.h

我已經成功地配置我安裝的是這樣的:

alt text http://img404.imageshack.us/img404/9210/vcdirsdq7.png

即使運行此腳本

alt text http://img404.imageshack.us/img404/5895/registrationcn0.png

,我設法編譯下面的文件中的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的seeems不要坐瓦爾。 .. :(

回答

8

使用上述建議將無法與scons一起使用:scons不會導入用戶環境(PATH和其他變量)。根本問題是scons不處理最新版本的SDK/VS。

我是scons的偶然貢獻者,並且正在致力於此功能的ATM。希望它很快會包含在scons中,但是這個特性比我第一次預期的要可靠地實現要困難得多,部分原因是每個sdk /編譯器組合都不一樣(有時甚至MS沒有正確的使用它們,一些.bat文件都壞了),所以我不能給你約會。我希望它會包含在1.2中(大概在一個月內發佈)。

0

您向我們展示瞭如何在Visual Studio中配置Visual Studio進行編譯,但是您沒有向我們展示您嘗試過的命令行環境對不起,我沒有試過Express版本,所以我不知道是否他們會創建更多的開始菜單快捷鍵,如Pro和以上。如果您打開一個suita ble命令提示符,其環境變量已設置,然後您可以在命令行上進行編譯。否則,您必須自己設置變量或執行批處理腳本來設置它們,每次您打開命令提示符時。

3

您需要設置包含文件路徑(以及其他可能的東西)。在命令行中,通常使用Visual Studio安裝的批處理文件(稱爲vsvars32.bat(或與012)來兼容VC6)。

我對scons並不熟悉,所以我不知道爲這個工具配置這些設置的最佳方式,但對於標準makefile,makefile中通常會有一行代碼,它使用include目錄路徑設置一個宏變量並且該宏被用作調用編譯器的命令中的命令行參數的一部分。

另一種可能是讓scons進程調用vsvars32.bat或從已使用批處理文件配置的命令行運行scons腳本。

總之,您需要將vsvars32.bat以某種方式配置到scons配置中。

+0

我可以證實,這是SCons的窗戶上工作時,我們的團隊正常使用的過程。 – 2008-10-17 05:31:51

+0

安德魯,你能進一步解釋如何在scons中包含vcvars32? – OscarRyz 2008-10-17 17:21:37

2

會有類似這樣的一個(2005年MSVC)一個批處理文件,設置環境變量:

c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat 

步驟1:查找快速安裝文件夾類似的文件

步驟2:創建與這些目標細節在桌面上的快捷方式和適當修改的路徑

cmd.exe /K "c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat" 

步驟3:從這個快捷

的命令行構建現在應該從這個控制檯窗口內工作打開DOS提示符。

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

這對我的作品在使用編譯wxWidgets的使用Visual C++ 2005速成命令行提示:

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) 
相關問題