Подтвердить что ты не робот

Использование Visual Studio 'cl' из обычной командной строки

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

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

Есть ли простой способ запустить cl без необходимости запуска из командной строки Visual Studio?

4b9b3361

Ответ 1

Компиляторы могут использоваться из командной строки (или 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 SDK\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 SDK\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 SDK\Windows\v6.1\Lib
  • C:\Program Files\Microsoft Visual Studio 9.0\VC\lib

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

Если вы счастливы ограничить свою установку одной версией и иметь длинный путь и набор переменных окружения, перенесите эти параметры (вручную) в переменные системной среды ( "Мой компьютер | Свойства" или "Пауза/пауза" )).

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

Ответ 6

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

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

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

Ответ 7

Моя версия открытия командной строки визуальной студии для командной строки Visual Studio в . Используется внутри для создания библиотеки/проекта, а затем выполняет дополнительные шаги с результирующими DLL файлами.

Скопируйте эти строки в ваш файл Compile and execute other steps.cmd или аналогичный.

@echo off

REM Load Visual Studio 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

В этой версии script я "остаюсь" в интерактивном режиме командной строки. Комментируйте REM %comspec% /k, чтобы использовать script для неинтерактивных целей.