Использование Visual Studio 'cl' из обычной командной строки - PullRequest
33 голосов
/ 17 сентября 2008

Visual Studio 2003 и 2005 (и, возможно, 2008, насколько мне известно) требуют, чтобы пользователь командной строки запускался в «командной строке Visual Studio». При запуске этой командной строки он устанавливает различные переменные среды, которые компилятор C ++ использует при компиляции.

Это не всегда желательно. Если, например, я хочу запустить «cl» изнутри Ant, я бы хотел избежать запуска Ant из «командной строки Visual Studio». Запуск vcvars32.bat не вариант, так как среда, установленная vcvars32.bat, будет потеряна к моменту запуска cl (если он запускается из Ant).

Существует ли простой способ запуска cl без запуска из командной строки Visual Studio?

Ответы [ 7 ]

51 голосов
/ 17 сентября 2008

Компиляторы могут использоваться из командной строки (или make-файлов), как и любые другие компиляторы. Основными вещами, о которых вам нужно позаботиться, являются переменные окружения INCLUDE и LIB и PATH. Если вы работаете с cmd.exe, вы можете просто запустить этот .bat, чтобы установить среду:

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

Если вы пытаетесь использовать компиляторы из make-файла, Cygwin, MinGW или чего-то подобного, вам нужно установить переменные окружения вручную. Предполагая, что компилятор установлен в расположении по умолчанию, это должно работать для компилятора Visual Studio 2008 и последней версии Windows SDK:

Добавить в PATH:

  • C: \ Program Files \ 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: \ Program Files \ Microsoft SDKs \ Windows \ v6.1 \ Lib
  • C: \ Program Files \ Microsoft Visual Studio 9.0 \ VC \ lib

Это минимальный минимум, но его должно быть достаточно для базовых вещей. Изучите скрипт vcvarsall.bat, чтобы узнать, что еще вы хотите установить.

21 голосов
/ 18 сентября 2008

Создайте свой собственный пакетный файл (скажем, 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, за исключением того, что сначала он сначала загрузит необходимые переменные среды.

6 голосов
/ 17 сентября 2008

Вы можете просто запустить пакетный файл, который устанавливает переменные самостоятельно. В VS08 он расположен по адресу: -

C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
2 голосов
/ 17 сентября 2008

То, что делают пакетные файлы vcvars32 или vsvars32, - не ракетостроение. Они просто устанавливают переменные среды PATH, INCLUDE, LIB и, возможно, LIBPATH на разумные значения по умолчанию для конкретной версии компилятора.

Все, что вам нужно сделать, это убедиться, что эти вещи установлены правильно для вашего Ant или make-файла (либо перед их вызовом, либо внутри них).

Для INCLUDE и LIB / LIBPATH альтернативой настройке этих элементов в переменных среды является передача этих настроек в командную строку в качестве явных параметров.

1 голос
/ 13 июля 2009

Хитрость в том, чтобы всегда использовать правильный пакетный файл vcvars. Если у вас установлена ​​только одна версия VisualStudio, это не проблема. Если вы имеете дело с несколькими версиями, такими как я, становится очень легко запустить сборку MSVC ++ 14 в консоли, которая была настроена с помощью файла vcvars MSVC ++ 15. Это может работать или не работать, но все, что вы получаете, будет отличаться от того, что вы собираете из VisualStudio.

Мы решили эту проблему в terp , извлекая правильный файл vcvars из выбранного компилятора и всегда настраивая среду внутри для вызова инструмента. Таким образом, у вас всегда будет правильный файл vcvars для используемого компилятора.

Просто повторюсь: я настоятельно рекомендую не пытаться дублировать вручную то, что файл vcvars делает для вас. Вы обязаны что-то пропустить или сделать это достаточно правильно, чтобы выглядело, как будто оно работает, хотя на самом деле делает что-то немного отличное от того, что вы хотели.

1 голос
/ 17 сентября 2008

Пакетный файл vcvarsall.bat, запускаемый из командной строки Visual Studio, просто пытается сохранить переменные и пути вашей системной среды в хорошем и чистом виде (и это важно, если у вас несколько версий Visual Studio).

Если вы довольны ограничением вашей настройки одной версией и наличием длинного пути и набора переменных среды, перенесите эти настройки (вручную) в переменные среды системы (Мой компьютер | Свойства --- или Win-Pause / Break ).

Я бы рекомендовал против этого, хотя!

0 голосов
/ 15 июня 2012

Моя версия открытия командной строки Visual Studio для командной строки 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, чтобы использовать скрипт только в неинтерактивных целях.

...