фатальная ошибка C1083: не удается открыть файл включения: «Windows.h»: и scons - PullRequest
8 голосов
/ 17 октября 2008

Сегодня официально мой первый день с C ++: P

Я скачал Visual C ++ 2005 Express Edition и Microsoft Platform SDK для Windows Server 2003 с пакетом обновления 1 (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 и PSDK

Включить tiffi.h

Wndows.h

Мне удалось настроить мою установку следующим образом:

alt text

И даже запустить этот скрипт

alt text

И мне удалось скомпилировать файл ниже в 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?

EDIT

На самом деле (и я забыл вам это сказать) я запустил командную строку со ссылкой «Командная строка 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"

Тем не менее, Сконс, похоже, не берет перемен ... :(

Ответы [ 6 ]

8 голосов
/ 17 октября 2008

Использование приведенных выше рекомендаций не будет работать с scons: scons не импортирует пользовательскую среду (PATH и другие переменные). Основная проблема заключается в том, что scons не поддерживает последние версии SDK / VS.

Я иногда помогаю scons и работаю над этой функцией ATM. Надеюсь, он скоро будет включен в scons, но эту функцию гораздо сложнее реализовать надежнее, чем я ожидал, отчасти потому, что каждая комбинация sdk / компилятора отличается (а иногда даже MS не понимает это правильно, некоторые из их файлов .bat сломаны), поэтому я не могу дать вам дату. Я надеюсь, что он будет включен в 1.2 (будет выпущен примерно через месяц).

3 голосов
/ 17 октября 2008

Вам необходимо установить путь к включаемому файлу (и, возможно, другие вещи). В командной строке это обычно делается с помощью пакетного файла, который устанавливает Visual Studio, с именем vsvars32.bat (или vcvars32.bat для совместимости с VC6).

Я не знаком со scons, поэтому не знаю, как лучше настроить эти параметры для этого инструмента, но для стандартных make-файлов в make-файле обычно есть строка, которая устанавливает макропеременную с путем к каталогу include этот макрос используется как часть параметра командной строки в команде, которая вызывает компилятор.

Другая возможность может состоять в том, чтобы процесс scons вызывал vsvars32.bat или запускал скрипт scons из командной строки, которая была настроена с помощью командного файла.

Короче говоря, вам нужно получить то, что vsvars32.bat настраивает в конфигурации scons.

2 голосов
/ 17 октября 2008

Будет пакетный файл, похожий на этот (для 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 с помощью этого ярлыка

Сборка командной строки теперь должна работать в этом окне консоли.

0 голосов
/ 09 февраля 2009

Это работает для меня при компиляции 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)
0 голосов
/ 21 ноября 2008

Будет хорошо, когда 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 голосов
/ 17 октября 2008

Вы показываете, как вы настроили Visual Studio для компиляции в Visual Studio, но вы не показали нам, какую среду командной строки вы пробовали. Извините, я не пробовал Express версии, поэтому я не знаю, создают ли они дополнительные ярлыки меню «Пуск», как Pro и выше. Если вы откроете подходящую командную строку с уже установленными переменными окружения, вы можете скомпилировать ее из командной строки. В противном случае вы должны установить переменные самостоятельно или выполнить пакетный скрипт для их установки каждый раз, когда открываете командную строку.

...