Usando Visual Studio 'cl' a partir de uma linha de comando normal,
-
01-07-2019 - |
Pergunta
Visual Studio 2003 e 2005 (e talvez 2008 para tudo que eu sei) exigem que o usuário de linha de comando para executar no 'Visual Studio Command Prompt'. Ao iniciar este comando prompt de ele define várias variáveis ??de ambiente que o compilador C ++, cl, usos ao compilar.
Isso nem sempre é desejável. Se, por exemplo, eu quero correr 'cl' de dentro Ant, eu gostaria de evitar ter que executar Ant dentro do 'Visual Studio Command Prompt'. Correndo vcvars32.bat não é uma opção como o conjunto ambiente por vcvars32.bat seria perdido pela cl tempo foi executado (se em execução a partir de dentro Ant).
Existe uma maneira fácil de executar cl sem ter que executar a partir de dentro o comando Visual Studio prompt de?
Solução
Os compiladores pode ser usado a partir da linha de comando (ou makefiles) assim como quaisquer outros compiladores. As principais coisas que você precisa para cuidar de são o INCLUDE e LIB variáveis ??de ambiente e PATH. Se você estiver executando a partir cmd.exe, você pode simplesmente executar este .bat para definir o ambiente:
C: \ Program Files \ Microsoft Visual Studio 9.0 \ VC \ vcvarsall.bat
Se você está tentando usar os compiladores de um makefile, Cygwin, MinGW, ou algo parecido, é necessário definir as variáveis ??de ambiente manualmente. Assumindo que o compilador está instalado no local padrão, isso deve funcionar para o compilador Visual Studio 2008 eo mais recente do Windows SDK:
Adicionar a caminho:
- 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
Adicionar para incluir:
- 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
Adicionar a LIB:
- C: \ Program Files \ Microsoft SDKs \ Windows \ v6.1 \ Lib
- C: \ Program Files \ Microsoft Visual Studio 9.0 \ VC \ lib
Estes são o mínimo, mas deve ser suficiente para coisas básicas. Estudar o script vcvarsall.bat para ver o que mais você pode querer set.
Outras dicas
Criar seu próprio arquivo de lote (digamos clenv.bat), e chamada que em vez de 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 agora pode ser invocado como cl.exe, exceto que ele irá primeiro carregar as variáveis ??de ambiente necessário em primeiro lugar.
Você pode simplesmente executar o arquivo batch que define as variáveis ??de si mesmo. Em VS08 ele está localizado em: -
C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
O que os arquivos em lote vcvars32 ou vsvars32 não é ciência do foguete. Eles simplesmente definir o PATH, INCLUDE, LIB, e, possivelmente, as variáveis ??de ambiente LIBPATH para padrões sensíveis para a versão do compilador particular.
Tudo que você tem a fazer é se certificar de que as coisas estão definidas corretamente para o seu Ant ou makefile (seja antes de invocar-los ou dentro deles).
Para INCLUDE e LIB / LIBPATH uma alternativa para configurar esses itens em variáveis ??de ambiente é passar essas configurações para a linha de comando como parâmetros explícitos.
O arquivo de lote vcvarsall.bat que é executado pelo prompt de comando do Visual Studio está simplesmente tentando manter o seu sistema variáveis ??de ambiente e caminhos agradável e limpo (e é importante se você tiver várias versões do Visual Studio).
Se você está feliz limitando sua configuração para uma versão e ter um caminho longo e conjunto de variáveis ??de ambiente, transferir essas configurações (manualmente) para as variáveis ??de ambiente do sistema (Meu Computador | Propriedades --- ou Win-Pause / Break ).
Eu recomendo contra esta embora!
O truque é sempre usar o arquivo de lote vcvars correta. Se você tiver apenas uma versão do VisualStudio instalado, isso não é grande problema. Se você está lidando com várias versões como eu, torna-se muito fácil de executar um MSVC ++ 14 construir em um console que foi criada com uma MSVC ++ arquivo de 15 vcvars. Ele pode ou não pode funcionar, mas o que você está recebendo vai ser diferente do que você estaria construindo a partir de dentro VisualStudio.
Nós têm lidado com essa questão em terp derivando o arquivo vcvars apropriados do compilador escolhido e sempre configurar o ambiente internamente para a invocação ferramenta. Dessa forma, você sempre terá o arquivo vcvars certas para o compilador que você está usando.
Apenas para reiterar: Eu recomendo contra tentando duplicar manualmente o que o arquivo vcvars faz por você. Você é obrigado a perder algo ou obtê-lo o suficiente apenas para a direita que parece que ele está trabalhando, enquanto, na verdade, fazer algo um pouco diferente do que você queria.
Minha versão de abrir a linha de comando do Visual Studio para Visual Studio Command Prompt em visual-studio-2010 . Usada internamente para construir uma biblioteca / projeto e, em seguida, executar algumas etapas extra com os arquivos DLL resultantes.
Copiar estas linhas ao seu arquivo Compile and execute other steps.cmd
, ou similar.
@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
Nesta versão do script, eu "estadia" no modo de linha de comando interativa depois. Comentário para REM %comspec% /k
para usar somente o script para fins não-interativas.