неустранимая ошибка C1083: не удается открыть файл include: 'Windows.ч': и проектов SCons

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

Я загрузил Visual C++ 2005 Express Edition и Microsoft Platform SDK для Windows Server 2003 SP1, потому что я хочу получить доступ к открытым исходным кодом Проект Enso.

Итак, после установки scons я пошел к консоли и попытался скомпилировать ее с помощью scons, но получил эту ошибку:

C:oreyesappsensoenso-read-onlysrcplatformwin32IncludeWinSdk.h(64) : fatal error C1083: Cannot open include file: 'Windows.h': No such file or directory
scons: *** [srcplatformwin32InputManagerAsyncEventProcessorRegistry.obj] Error 2
scons: building terminated because of errors.

после проверки этих ссылок:

VS ans PSDK

включить Тиффи.h

Wndows.h

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

alt текст http://img404.imageshack.us/img404/9210/vcdirsdq7.png

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

alt текст http://img404.imageshack.us/img404/5895/registrationcn0.png

и мне удалось скомпилировать файл ниже в ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ.

// 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 Command Prompt".

Я предполагаю, что это будет включать в себя пути в переменных среды. Ну, после их печати я нахожу, что это не так:

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

и их не было, поэтому я создал это .летучая мышь файл:

set PATH=%PATH%;"C:Program FilesMicrosoft Platform SDKBin"
set INCLUDE=%INCLUDE%;"C: Program FilesMicrosoft Platform SDKInclude"
set LIB=%LIB%;"C: Program FilesMicrosoft Platform SDKLib"

тем не менее, scons seeems не принимать Варс... :(

6 ответов


использование вышеуказанных рекомендаций не будет работать с scons: scons не импортирует пользовательскую среду (путь и другие переменные). Основная проблема заключается в том, что 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: найдите аналогичный файл в папках Экспресс-установки

Шаг 2: создайте ярлык на рабочем столе с этими целевыми данными и соответствующим образом измененный путь:

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

Шаг 3: откройте приглашение DOS с помощью этого ярлыка

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


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


это будет хорошо, когда scons делает это автоматически. Пока я использую это (запуск из командной строки SDK, не уверен, есть ли разница, если выполняется после vsvars32.летучая мышь):

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)