استخدام "cl" الخاص بـ Visual Studio من سطر أوامر عادي

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

  •  01-07-2019
  •  | 
  •  

سؤال

يتطلب Visual Studio 2003 و2005 (وربما 2008 لكل ما أعرفه) من مستخدم سطر الأوامر أن يعمل في "موجه أوامر Visual Studio".عند بدء تشغيل موجه الأوامر هذا، فإنه يقوم بتعيين متغيرات البيئة المختلفة التي يستخدمها مترجم C++، cl، عند التحويل البرمجي.

وهذا ليس مرغوبا دائما.على سبيل المثال، إذا كنت أرغب في تشغيل "cl" من داخل Ant، ​​فأنا أرغب في تجنب الاضطرار إلى تشغيل Ant من داخل "موجه أوامر Visual Studio".تشغيل vcvars32.bat ليس خيارًا لأن البيئة التي تم تعيينها بواسطة vcvars32.bat ستفقد بحلول الوقت الذي تم فيه تشغيل cl (في حالة تشغيله من داخل Ant).

هل هناك طريقة سهلة لتشغيل cl دون الحاجة إلى التشغيل من داخل موجه أوامر Visual Studio؟

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

المحلول

يمكن استخدام المترجمين من سطر الأوامر (أو ملفات التعريف) تمامًا مثل أي مترجمين آخرين.الأشياء الرئيسية التي تحتاج إلى الاهتمام بها هي متغيرات البيئة INCLUDE وLIB وPATH.إذا كنت تقوم بالتشغيل من cmd.exe، فيمكنك فقط تشغيل ملف .bat هذا لتعيين البيئة:

C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat

إذا كنت تحاول استخدام المترجمين من ملف makefile، أو Cygwin، أو MinGW، أو شيء من هذا القبيل، فأنت بحاجة إلى تعيين متغيرات البيئة يدويًا.بافتراض أن المترجم مثبت في الموقع الافتراضي، يجب أن يعمل هذا مع المترجم Visual Studio 2008 وأحدث Windows SDK:

إضافة إلى المسار:

  • C:\ملفات البرنامج\Microsoft SDKs\Windows\v6.1\Bin
  • C:\Program Files\Microsoft Visual Studio 9.0\VC\Bin
  • C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE

إضافة إلى تضمين:

  • C:\Program Files\Microsoft SDKs\Windows\v6.1\Include
  • C:\Program Files\Microsoft Visual Studio 9.0\VC\include
  • C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include

أضف إلى LIB:

  • C:\ملفات البرنامج\Microsoft SDKs\Windows\v6.1\Lib
  • C:\Program Files\Microsoft Visual Studio 9.0\VC\lib

هذه هي الحد الأدنى، ولكن يجب أن تكون كافية للأشياء الأساسية.ادرس البرنامج النصي vcvarsall.bat لمعرفة ما قد ترغب في تعيينه.

نصائح أخرى

قم بإنشاء ملف دفعي خاص بك (على سبيل المثال clenv.bat)، واستدعه بدلاً من cl:

@echo off
:: Load compilation environment
call "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
:: Invoke compiler with any options passed to this batch file
"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.exe" %*

يمكن الآن استدعاء clenv.bat تمامًا مثل cl.exe، باستثناء أنه سيقوم أولاً بتحميل متغيرات البيئة المطلوبة أولاً.

يمكنك ببساطة تشغيل الملف الدفعي الذي يقوم بتعيين المتغيرات بنفسك.في VS08 يقع في: -

C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat

ما تفعله الملفات الدفعية vcvars32 أو vsvars32 ليس علم الصواريخ.إنهم ببساطة يقومون بتعيين متغيرات البيئة PATH، وINCLUDE، وLIB، وربما LIBPATH على الإعدادات الافتراضية المعقولة لإصدار برنامج التحويل البرمجي المحدد.

كل ما عليك فعله هو التأكد من ضبط هذه الأشياء بشكل صحيح للنملة أو ملف التعريف الخاص بك (إما قبل استدعائها أو بداخلها).

بالنسبة إلى INCLUDE وLIB/LIBPATH، فإن البديل لإعداد هذه العناصر في متغيرات البيئة هو تمرير هذه الإعدادات إلى سطر الأوامر كمعلمات صريحة.

يحاول الملف الدفعي vcvarsall.bat الذي يتم تشغيله بواسطة موجه أوامر Visual Studio ببساطة الحفاظ على متغيرات بيئة النظام لديك ومساراتها لطيفة ونظيفة (وهو مهم إذا كان لديك إصدارات متعددة من Visual Studio).

إذا كنت سعيدًا بقصر الإعداد على إصدار واحد ولديك مسار طويل ومجموعة من متغيرات البيئة، فانقل هذه الإعدادات (يدويًا) إلى متغيرات بيئة النظام (جهاز الكمبيوتر|الخصائص --- أو Win-Pause/Break).

أنصح ضد هذا بالرغم من ذلك!

الحيلة هي استخدام الملف الدفعي vcvars الصحيح دائمًا.إذا كان لديك إصدار واحد فقط من VisualStudio مثبتًا، فهذه ليست مشكلة كبيرة.إذا كنت تتعامل مع إصدارات متعددة مثلي، يصبح من السهل جدًا تشغيل إصدار MSVC++ 14 في وحدة التحكم التي تم إعدادها باستخدام ملف MSVC++ 15 vcvars.قد ينجح الأمر وقد لا ينجح، ولكن كل ما ستحصل عليه سيكون مختلفًا عما ستقوم بإنشائه من داخل VisualStudio.

لقد تعاملنا مع هذه القضية في ثالثي عن طريق اشتقاق ملف vcvars المناسب من المترجم المختار وإعداد البيئة دائمًا داخليًا لاستدعاء الأداة.بهذه الطريقة، سيكون لديك دائمًا ملف vcvars المناسب للمترجم الذي تستخدمه.

فقط أكرر:أوصي بشدة بعدم محاولة تكرار ما يفعله ملف vcvars يدويًا لك.لا بد أن تفوت شيئًا ما أو تفعله بشكل صحيح بما فيه الكفاية بحيث يبدو وكأنه يعمل بينما تفعل شيئًا مختلفًا قليلاً عما تريد.

نسختي من فتح سطر أوامر الاستوديو المرئي لموجه أوامر Visual Studio في .يُستخدم داخليًا لإنشاء مكتبة/مشروع ثم تنفيذ بعض الخطوات الإضافية باستخدام ملفات DLL الناتجة.

انسخ هذه السطور إلى جهازك Compile and execute other steps.cmd ملف أو ما شابه ذلك.

@echo off

REM Load Visual Studio's build tools
call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

REM Choose what you want to do, 1 or 2 by (un)commenting

REM     1. Add your cl.exe (or msbuild.exe or other) commands here
REM msbuild.exe MyProject.csproj
REM cl.exe
REM custom-step.exe  %*
REM pause

REM     2. Open a normal interactive system command shell with all variables loaded
%comspec% /k

في هذا الإصدار من البرنامج النصي، "أبقى" في وضع سطر الأوامر التفاعلي بعد ذلك.التعليق على REM %comspec% /k لاستخدام البرنامج النصي فقط لأغراض غير تفاعلية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top