it-swarm-pt.tech

Usando 'cl' do Visual Studio em uma linha de comando normal

O Visual Studio 2003 e 2005 (e talvez 2008, pelo que sei) exigem que o usuário da linha de comando seja executado no 'Visual Studio Command Prompt'. Ao iniciar este prompt de comando, ele define várias variáveis ​​de ambiente que o compilador C++, cl, usa ao compilar.

Isso nem sempre é desejável. Se, por exemplo, eu quiser executar 'cl' de dentro do Ant, gostaria de evitar ter que executar o Ant de dentro do 'Prompt de Comando do Visual Studio'. A execução do vcvars32.bat não é uma opção, pois o ambiente definido pelo vcvars32.bat seria perdido no momento em que o cl fosse executado (se estiver sendo executado no Ant).

Existe uma maneira fácil de executar cl sem precisar executar no prompt de comando do Visual Studio?

35
Tom Hennen

Os compiladores podem ser usados ​​na linha de comando (ou makefiles) como qualquer outro compilador. As principais coisas que você precisa cuidar são as variáveis ​​de ambiente INCLUDE e LIB e PATH. Se você estiver executando o cmd.exe, poderá executar este .bat para definir o ambiente:

C:\Arquivos de programas\Microsoft Visual Studio 9.0\VC\vcvarsall.bat

Se você estiver tentando usar os compiladores de um makefile, Cygwin, MinGW ou algo assim, precisará definir as variáveis ​​de ambiente manualmente. Supondo que o compilador esteja instalado no local padrão, isso deve funcionar no compilador do Visual Studio 2008 e no Windows SDK mais recente:

Adicione ao PATH:

  • C:\Arquivos de programas\Microsoft SDKs\Windows\v6.1\Bin
  • C:\Arquivos de programas\Microsoft Visual Studio 9.0\VC\Bin
  • C:\Arquivos de programas\Microsoft Visual Studio 9.0\Common7\IDE

Adicionar a INCLUIR:

  • C:\Arquivos de programas\Microsoft SDKs\Windows\v6.1\Include
  • C:\Arquivos de programas\Microsoft Visual Studio 9.0\VC\include
  • C:\Arquivos de programas\Microsoft Visual Studio 9.0\VC\atlmfc\include

Adicionar ao LIB:

  • C:\Arquivos de programas\Microsoft SDKs\Windows\v6.1\Lib
  • C:\Arquivos de programas\Microsoft Visual Studio 9.0\VC\lib

Estes são os mínimos, mas devem ser suficientes para coisas básicas. Estude o script vcvarsall.bat para ver o que mais você pode querer definir.

53
Ville Laurikari

Crie seu próprio arquivo em lotes (por exemplo, clenv.bat) e chame-o 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" %*

o clenv.bat agora pode ser chamado da mesma forma que o cl.exe, exceto pelo fato de carregar primeiro as variáveis ​​de ambiente necessárias.

21
Eclipse

Você pode simplesmente executar o arquivo em lotes que define as variáveis ​​por conta própria. No VS08, ele está localizado em: -

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

O que os arquivos em lote vcvars32 ou vsvars32 fazem não é ciência do foguete. Eles simplesmente configuram as variáveis ​​de ambiente PATH, INCLUDE, LIB e, possivelmente, as LIBPATH como padrões sensíveis para a versão específica do compilador.

Tudo o que você precisa fazer é garantir que essas coisas estejam definidas corretamente para o seu Ant ou makefile (antes de invocá-las ou dentro delas).

Para INCLUDE e LIB/LIBPATH, uma alternativa para definir esses itens em variáveis ​​de ambiente é passar essas configurações para a linha de comandos como parâmetros explícitos.

2
Michael Burr

O arquivo em lotes vcvarsall.bat, executado pelo prompt de comando do Visual Studio, está simplesmente tentando manter as variáveis ​​e os caminhos do ambiente do sistema agradáveis ​​e limpos (e é importante se você tiver várias versões do Visual Studio).

Se você estiver satisfeito em limitar sua configuração a uma versão e possuir um caminho longo e um conjunto de variáveis ​​de ambiente, transfira essas configurações (manualmente) para as Variáveis ​​de ambiente do sistema (Meu computador | Propriedades --- ou Pausa/pausa/pausa).

Eu recomendaria contra isso!

1
Ray Hayes

O truque é sempre usar o arquivo em lotes vcvars correto. Se você possui apenas uma versão do VisualStudio instalada, isso não é grande problema. Se você está lidando com várias versões como eu, fica muito fácil executar uma compilação do MSVC++ 14 em um console que foi configurado com um arquivo MSVC++ 15 vcvars. Pode ou não funcionar, mas o que você está recebendo será diferente do que você criaria no VisualStudio.

Lidamos com esse problema em terp derivando o arquivo vcvars apropriado do compilador escolhido e sempre configurando o ambiente internamente para a chamada da ferramenta. Dessa forma, você sempre tem o arquivo vcvars correto para o compilador que está usando.

Apenas para reiterar: eu recomendo não tentar duplicar manualmente o que o arquivo vcvars faz por você. Você provavelmente perderá algo ou acertará o suficiente para parecer que está funcionando enquanto realmente faz algo ligeiramente diferente do que você queria.

1
alex

Minha versão da abertura da linha de comando do visual studio para o Prompt de Comando do Visual Studio em visual-studio-201 . Usado internamente para criar uma biblioteca/projeto e, em seguida, execute algumas etapas extras com os arquivos DLL resultantes).

Copie essas linhas para o seu Compile and execute other steps.cmd arquivo 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, "permaneço" no modo de linha de comando interativo posteriormente. Comentar para REM %comspec% /k para usar apenas o script para fins não interativos.

0
Joel Purra