2008-10-17 7 views
8

Heute ist offiziell mein erster Tag mit C++: Pfatal error C1083: kann nicht geöffnet werden Include-Datei: 'Windows.h': und scons

Ich habe Visual C++ 2005 Express Edition und Microsoft Platform SDK für Windows Server heruntergeladen 2003 SP1, weil ich die Open Source Enso Project in die Hände bekommen möchte.

So, nach scons Installation ging ich in die Konsole und versuchte es mit scons zu kompilieren, aber ich habe diesen Fehler:

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. 

Nach diesem Link Überprüfung:

VS ans PSDK

Include tiffi.h

Wndows.h

Ich habe es geschafft, meine Installation wie folgt zu konfigurieren:

dieses Skript

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

Und selbst laufen

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

Und ich schaffte es die Datei unten in der IDE zu kompilieren.

// Test.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <Windows.h> 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    return 0; 
} 

Aber ich bekomme immer noch diese Ausnahme in der Konsole. Hat jemand Erfahrung mit Scons?

EDIT

Eigentlich (und ich vergessen hat, dies zu sagen) ich die Eingabeaufforderung mit dem Link "Visual Studio 2005-Eingabeaufforderung" gestartet.

Ich nehme an, dies die Pfade in Umgebungsvariablen enthalten wird. Nun, nachdem sie den Druck finde ich, dass es tat nicht:

echo %INCLUDE% 
echo %LIB% 
echo %PATH% 

Und sie waren nicht vorhanden, so Ich habe diese .bat-Datei:

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" 

Dennoch scons seeems nicht die Vars zu nehmen. .. :(

Antwort

8

Die Verwendung der obigen Empfehlungen funktioniert nicht mit SCONS: SCONS importiert die Benutzerumgebung (PATH und andere Variablen) nicht. Das grundlegende Problem ist, dass Scons nicht mit den neuesten Versionen von SDKs/VS arbeitet.

Ich bin gelegentlich Beiträge zu Scons, und arbeite an dieser Funktion ATM. Hoffentlich wird es bald in Scons enthalten sein, aber das Feature ist viel schwieriger zuverlässig zu implementieren, als ich es erwartet hatte, teilweise weil jede sdk/Compiler-Kombination anders ist (und manchmal sogar MS es nicht richtig macht, einige ihrer .bat-Dateien) sind kaputt), also kann ich dir kein Date geben. Ich hoffe, es wird in 1.2 enthalten sein (in ungefähr einem Monat veröffentlicht werden).

+0

: S Wie füge ich manuell die Umgebungsvariablen direkt zum SCON-Build-Prozess hinzu? – OscarRyz

+1

Es gibt zwei Möglichkeiten. Nehmen wir an, Sie haben den SDK-Pfad in der Python-Variablen mssdk, Sie können dann die Pfade mit env.Prepend (CPPPATH, [os.path.join (mssdk, "Include")]) und env.Prepend (LIBPATH, [os .path.join (mssdk, "libpath")]) –

+0

Eine andere Möglichkeit besteht darin, die Umgebung einfach in scons: env = Environment (ENV = os.environ) zu importieren. Dann werden Scons alle Umgebungsmodifikationen verwenden, die Sie in der Shell vornehmen (DOS-Shell hier unter Windows). –

0

Sie zeigen uns, wie Sie Visual Studio für Compilierungen in Visual Studio konfiguriert haben, aber Sie haben uns nicht gezeigt, welche Befehlszeilenumgebung Sie ausprobiert haben. Leider habe ich Express-Versionen nicht ausprobiert, daher weiß ich nicht Sie erstellen zusätzliche Startmenü-Kürzel wie Pro und höher, wenn Sie ein Suit öffnen ble Eingabeaufforderung mit bereits gesetzten Umgebungsvariablen können Sie in der Befehlszeile kompilieren. Andernfalls müssen Sie die Variablen selbst festlegen oder ein Stapelscript ausführen, um sie bei jedem Öffnen einer Eingabeaufforderung festzulegen.

3

Sie müssen die Include-Datei Pfad setzen (und möglicherweise andere Dinge). In der Befehlszeile wird dies in der Regel mit Hilfe einer Batch-Datei durchgeführt, dass Visual Studio vsvars32.bat genannt Installationen (oder vcvars32.bat für die Kompatibilität mit VC6).

Ich bin nicht vertraut mit scons so dass ich die beste Art und Weise nicht wissen, diese Einstellungen für das Werkzeug konfigurieren zu bekommen, aber für Standard-Makefiles gibt es in der Regel eine Zeile in der Make-Datei, die eine Makrovariable mit dem Verzeichnispfad enthalten Sets und dieses Makro wird als Teil eines Befehlszeilenparameters in dem Befehl verwendet, der den Compiler aufruft.

Eine weitere Möglichkeit besteht darin, dass der scons-Prozess vsvars32.bat aufruft oder das Skript scons über eine Befehlszeile ausführt, die mit der Batchdatei konfiguriert wurde.

Kurz gesagt, müssen Sie die Dinge, die vsvars32.bat konfiguriert irgendwie in die SCON-Konfiguration.

+0

Ich kann bestätigen, dass dies der Prozess ist, der unser Team normalerweise verwenden, wenn sie mit SCons an Fenstern arbeiten. –

+0

Andrew, kannst du weiter erklären, wie du Vcvars32 in Scons einbaust? – OscarRyz

2

Es wird eine Batch-Datei ähnlich wie diese (für MSVC 2005), die die Umgebungsvariablen aufstellt:

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

Schritt 1: eine ähnliche Datei in den Installationsordner Express finden

Schritt 2: erstellen Sie eine Verknüpfung auf dem Desktop mit diesen Zieldetails und einen geeignet modifizierten Pfad:

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

Schritt 3: die DOS-Eingabeaufforderung Öffnen Sie über diese Verknüpfung

Die Kommandozeile bauen nun innerhalb dieses Konsolenfenster funktionieren sollte.

0

Es wird nett sein, wenn Scons das automatisch macht. Denn jetzt, verwende ich diesen (von einer SDK Eingabeaufforderung ausführen, nicht sicher, ob es ein Unterschied, wenn nach vsvars32.bat ausgeführt ist):

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

Dies funktioniert für mich, während wxwidgets mit Visual C++ 2005 Express Kompilieren mit dem Befehlszeile:

REM Fix Error error C1083 'windows.h' 

(Use/useenv Option beim Kompilieren.)

set PDSKWIN=C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2 

(Wechsel nach rechts ein.)

set INCLUDE=%PDSKWIN%\Include;%INCLUDE% 

set LIB=%PDSKWIN%\Lib;%LIB% 

Dann verwende ich diese Zeile beim Kompilieren.Ich glaube, fügen Sie einfach /useenv auf Ihre Linien und alles sollte funktionieren:

vcbuild /useenv /nohtmllog /nologo name.proj (or any file to compile) 
Verwandte Themen