2008-10-17 14 views
8

Hoy es oficialmente mi primer día con C++: Perror grave C1083: No se puede abrir archivo de inclusión: 'Windows.h': y scons

He descargado Visual C++ 2005 Express Edition y Microsoft Platform SDK para Windows Server 2003 SP1, porque quiero poner mis manos en el código abierto Enso Project.

Por lo tanto, después de instalar scons Fui a la consola y trataron de compilarlo usando scons, pero me dio este error:

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. 

Después de comprobar estos enlaces:

VS ans PSDK

Include tiffi.h

Wndows.h

He conseguido configurar la instalación de la siguiente manera:

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

e incluso ejecutar este script

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

Y logré compilar el archivo a continuación en el 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; 
} 

Pero sigo recibiendo esa excepción en la consola. ¿Alguien tiene experiencia con scons?

EDITAR

En realidad (y se me olvidó decirte esto) Empecé el símbolo del sistema con el enlace de "Visual Studio 2005 Símbolo del sistema".

Supongo que esto incluirá las rutas en las variables de entorno. Bien después de imprimirlas Me parece que no lo hizo:

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

y no estaban presentes, así que creé este archivo .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" 

Aún así, no scons seeems tomar las vars. .. :(

Respuesta

8

El uso de las recomendaciones anteriores no funcionará con scons: scons no importa el entorno de usuario (RUTA y otras variables). El problema fundamental es que scons no maneja versiones recientes de SDKs/VS.

Soy un colaborador ocasional de scons, y estoy trabajando en esta característica de cajero automático. Con suerte, se incluirá pronto en scons, pero la función es mucho más difícil de implementar de manera confiable de lo que esperaba, en parte porque cada combinación de sdk/compilador es diferente (y a veces incluso MS no lo hace bien, algunos de sus archivos .bat están rotos), así que no puedo darte una cita. Espero que se incluya en 1.2 (se lanzará en aproximadamente un mes).

+0

: S ¿Cómo agrego manualmente las variables de entorno al proceso de compilación de scons directamente? – OscarRyz

+1

Hay dos formas. Supongamos que tiene la ruta SDK en la variable python mssdk, luego puede agregar las rutas usando env.Prepend (CPPPATH, [os.path.join (mssdk, "Include")]) y env.Prepend (LIBPATH, [os .path.join (mssdk, "libpath")]) –

+0

Otra forma es simplemente importar el entorno en scons: env = Environment (ENV = os.environ). Entonces, scons usará cualquier modificación de entorno que haga en el shell (shell de DOS aquí en Windows). –

0

Nos muestra cómo configuró Visual Studio para compilaciones dentro de Visual Studio pero no nos mostró qué entorno de línea de comandos ha intentado. Lo siento, no he probado las versiones Express, así que no sé si crean atajos de menú de inicio adicionales como Pro y arriba. Si abres un suita El símbolo del sistema, con sus variables de entorno ya establecidas, puede compilar en la línea de comando. De lo contrario, debe establecer las variables usted mismo o ejecutar un script por lotes para configurarlas, cada vez que abra un símbolo del sistema.

3

Debe establecer la ruta del archivo de inclusión (y posiblemente otras cosas). En la línea de comandos, esto generalmente se hace usando un archivo por lotes que instala Visual Studio llamado vsvars32.bat (o vcvars32.bat para compatibilidad con VC6).

No estoy familiarizado con scons, así que no sé la mejor manera de configurar estos parámetros para esa herramienta, pero para los archivos make normales suele haber una línea en el archivo make que establece una variable macro con la ruta del directorio de inclusión y esa macro se usa como parte de un parámetro de línea de comando en el comando que invoca el compilador.

Otra posibilidad podría ser que el proceso scons invoque vsvars32.bat o ejecute el script scons desde una línea de comandos que se haya configurado con el archivo por lotes.

En resumen, debe obtener las cosas que vsvars32.bat configura en la configuración de scons de alguna manera.

+0

puedo confirmar que este es el proceso que nuestro equipo utiliza normalmente cuando se trabaja con SCons en las ventanas. –

+0

Andrew, ¿puedes explicar cómo incluir vcvars32 en scons? – OscarRyz

2

habrá un archivo por lotes similar a éste (por MSVC 2005) que establece las variables de entorno:

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

Paso 1: Buscar un archivo similar en las carpetas de instalación express

Paso 2: Crear un acceso directo en el escritorio con estos detalles del objetivo y un camino adecuadamente modificada:

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

Paso 3: Abra la ventana de DOS a través de este acceso directo

El comando línea de acumulación ahora debe trabajar desde dentro de esta ventana de la consola.

0

Sería bueno cuando scons hace esto automáticamente. Por ahora, yo uso este (ejecutar desde un símbolo de SDK, no estoy seguro si hay una diferencia si se ejecuta después de 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

Esto funciona para mí durante la compilación de wxwidgets con Visual C++ 2005 Express utilizando el la línea de comandos:

REM Fix Error error C1083 'windows.h' 

(opción Usar/useenv al compilar.)

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

(Cambio a la derecha.)

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

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

Luego uso esta línea al compilar.Creo que acaba de añadir /useenv a sus líneas y todo debería funcionar bien:

vcbuild /useenv /nohtmllog /nologo name.proj (or any file to compile) 
Cuestiones relacionadas