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?

Foi útil?

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 . 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top