фатальная ошибка C1083:Невозможно открыть включаемый файл:«Windows.h»:и сконы

StackOverflow https://stackoverflow.com/questions/211035

Вопрос

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

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

Итак, после установки 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

Windows.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;
}

Но я все еще получаю это исключение в консоли.Есть ли у кого-нибудь опыт работы со сконсами?

РЕДАКТИРОВАТЬ

На самом деле (и я забыл вам это сказать) я запустил командную строку со ссылкой «Командная строка 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 не импортирует пользовательскую среду (PATH и другие переменные).Фундаментальная проблема заключается в том, что scons не поддерживает последние версии SDK/VS.

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

Другие советы

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

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

Другая возможность может заключаться в том, чтобы процесс 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, но не показали, какую среду командной строки вы пробовали.Извините, я не пробовал версии Express, поэтому не знаю, создают ли они дополнительные ярлыки в меню «Пуск», как это делают Pro и выше.Если вы откроете подходящую командную строку с уже установленными переменными среды, вы сможете скомпилировать ее в командной строке.В противном случае вам придется устанавливать переменные самостоятельно или запускать пакетный сценарий для их установки каждый раз, когда вы открываете командную строку.

Было бы здорово, если бы 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(';'))

У меня это работает при компиляции 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top