سؤال

اليوم رسميا أول يوم مع 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.

بعد التحقق من هذه الروابط:

مقابل الجواب PSDK

وتشمل tiffi.ح

Wndows.ح

لقد تمكنت من تكوين التثبيت مثل هذا:

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 التجربة ؟

تحرير

في الواقع (و لقد نسيت أن أقول لك هذا) بدأت موجه الأوامر مع الرابط "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 seeems عدم اتخاذ فأر...:(

هل كانت مفيدة؟

المحلول

باستخدام التوصيات المذكورة أعلاه لا تعمل مع scons:scons لا استيراد المستخدم والبيئة (مسار المتغيرات الأخرى).المشكلة الأساسية هي أن scons لا التعامل مع الإصدارات الأخيرة من تطوير البرامج/مقابل .

أنا عرضية مساهم scons ، وأنا أعمل على هذه الميزة أجهزة الصراف الآلي.ونأمل أن تكون مدرجة قريبا في scons ، ولكن الميزة هي أصعب بكثير لتنفيذ موثوق مما كنت متوقعا في البداية ، وذلك جزئيا لأن كل sdk/مترجم تركيبة مختلفة (وأحيانا حتى MS لا الحق في الحصول عليها, بعض .bat يتم تقسيم) ، لذلك لا أستطيع أن أعطيك الآن.ويحدوني الأمل في أنه سوف تدرج في 1.2 (سيصدر في approximatively شهر واحد).

نصائح أخرى

تحتاج إلى تعيين تشمل مسار الملف (وربما أشياء أخرى).في سطر الأوامر ويتم ذلك عادة باستخدام ملف دفعي Visual Studio تثبيت يسمى vsvars32.bat (أو vcvars32.bat من أجل التوافق مع VC6).

أنا لست على دراية scons لذلك أنا لا أعرف أفضل طريقة للحصول على هذه الإعدادات تكوين هذه الأداة ، ولكن القياسية makefiles عادة ما يكون هناك خط في makefile الذي يحدد ماكرو متغير مع تضمين مسار الدليل و هذا الماكرو يستخدم كجزء من سطر الأوامر المعلمة في الأمر أن استدعاء برنامج التحويل البرمجي.

هناك احتمال آخر قد يكون لديك scons عملية الاحتجاج vsvars32.الخفافيش أو تشغيل scons نصي من سطر الأوامر الذي تم تكوينه مع ملف دفعي.

باختصار تحتاج إلى الحصول على الأشياء التي vsvars32.الخفافيش بتكوين في 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 ولكنك لم تبين لنا ما سطر الأوامر البيئة حاولت.آسف أنا لم أحاول التعبير عن الإصدارات لذلك أنا لا أعرف إذا كانت إنشاء إضافية اختصارات قائمة ابدأ مثل برو أعلاه.إذا قمت بفتح مناسبة موجه الأوامر مع متغيرات البيئة بالفعل تعيين ثم يمكنك ترجمة على سطر الأوامر.وإلا عليك أن مجموعة المتغيرات نفسك أو تنفيذ دفعة النصي مجموعة منهم ، في كل مرة تقوم بفتح موجه الأوامر.

سيكون من الجميل عندما 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