visual - run c++ windows command line




rc.exe não é mais encontrado no prompt de comando do VS 2015 (7)

Acabei de instalar o Windows 10 Creators Update (versão 10.0.15063).

Eu tenho várias versões do Visual Studio instalado (2012, 2013, 2015 e 2017). Eu instalei o VS 2017 apenas algumas semanas atrás.

Problema

O CMake (versão 3.8.1) não encontra mais o compilador C / C ++ quando executado dentro de um "Prompt de Comando Nativo VS2015 x64" (ele funciona corretamente quando executado dentro de um prompt de comando do VS 2017).

Reprodução

Conteúdo do CMakeLists.txt :

project (test)
add_executable (test test.cpp)

(O conteúdo do test.cpp é irrelevante.)

Invocação do CMake, em um Prompt de Comando Nativo VS2015 x64:

> mkdir build
> cd build
> cmake -G "Visual Studio 14 2015 Win64" ..

Saída do CMake:

-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:1 (project):
  No CMAKE_C_COMPILER could be found.

CMake Error at CMakeLists.txt:1 (project):
  No CMAKE_CXX_COMPILER could be found.

-- Configuring incomplete, errors occurred!
See also "D:/dev/cmaketest/build/CMakeFiles/CMakeOutput.log".
See also "D:/dev/cmaketest/build/CMakeFiles/CMakeError.log".

Análise

O motivo da falha é claro quando se olha para CMakeFiles/CMakeError.log :

ClCompile:
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\CL.exe /c /nologo /W0 /WX- /Od /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TC /errorReport:queue CMakeCCompilerId.c
  CMakeCCompilerId.c
Link:
  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\link.exe /ERRORREPORT:QUEUE /OUT:".\CompilerIdC.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:".\CompilerIdC.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdC.lib" /MACHINE:X64 Debug\CMakeCCompilerId.obj
LINK : fatal error LNK1158: cannot run 'rc.exe' [D:\dev\cmaketest\build\CMakeFiles\3.8.1\CompilerIdC\CompilerIdC.vcxproj]

rc.exe (Resource Compiler) não foi encontrado. De fato, no mesmo prompt de comando do VS 2015:

> where rc.exe
INFO: Could not find files for the given pattern(s).

Enquanto ele é encontrado em um prompt de comando do VS 2013:

> where rc.exe
C:\Program Files (x86)\Windows Kits\8.1\bin\x64\rc.exe
C:\Program Files (x86)\Windows Kits\8.1\bin\x86\rc.exe

e um prompt de comando do VS 2017:

> where rc.exe
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe

Verificando o conteúdo das variáveis ​​de ambiente PATH em vários prompts de comando do VS:

  • Dentro de um prompt de comando do VS 2013, o PATH contém

    C:\Program Files (x86)\Windows Kits\8.1\bin\x64
  • Dentro de um prompt de comando do VS 2017, o PATH contém

    C:\Program Files (x86)\Windows Kits\10\bin\x64
    C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64
  • Mas dentro de um prompt de comando do VS 2015, o PATH contém apenas

    C:\Program Files (x86)\Windows Kits\10\bin\x64

    que não contém rc.exe .

Questões

  1. Este é um problema conhecido ou específico do meu sistema?

  2. O que a Atualização do Windows 10 Creators poderia instalar, desinstalar ou alterar no sistema (talvez algo relacionado aos SDKs do Windows) que acionaria esse problema?

  3. O que é uma maneira limpa de resolver isso?

Editar: componentes instalados VS 2017:


  1. execute o seu instalador online vs_community2017.exe.
  2. selecione modificar seu VS2017
  3. selecione desenvolvimento de desktop com C ++
  4. selecione o Windows 10 SDK (minha versão é 10.0.10586) e instale-o

Execute o prompt de comando do VS2015:

> where rc
> C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe
> C:\Program Files (x86)\Windows Kits\10\bin\x86\rc.exe

Parece que o vs2017 default instala o mais novo SDK e sobrescreve versões antigas.


Abra "C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ Ferramentas \ VsDevCmd.bat" em um editor de texto no modo de administrador e altere a linha

@if not "%WindowsSdkDir%" == "" @set PATH=%WindowsSdkDir%bin\x86;%PATH%

para

@if not "%WindowsSdkDir%" == "" @set PATH=%WindowsSdkDir%bin\x86;%WindowsSdkDir%bin\%WindowsSDKVersion%x86;%PATH%


Definitivamente não é só você. Eu instalei VS2017 ontem e isso parece ter produzido o mesmo problema no meu fim. Eu não tenho uma boa solução (isso deve ser relatado para a Microsoft como um bug), mas eu tenho uma solução alternativa hacky.

Eu era capaz de copiar rc.exe e rc.dll de

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64 
to
C:\Program Files (x86)\Windows Kits\10\bin\x86

Isso resolveu o problema para mim. Meu palpite é que é uma chave de registro sendo sobrescrita, mas não entendi o suficiente para ter certeza.


Especificar CMAKE_SYSTEM_VERSION=8.1 resolveu o problema para mim.


Para quem fica preso a isso, um determinado conjunto de problemas é:

  1. obter um novo Windows 10 PC
  2. instale VS 2017 [*]
  3. desinstalar VS 2017 e
  4. instalar o VS 2015

Se você fizer o acima,

parece que há um bug ou outro comportamento com o conjunto geral de instaladores do Windows / VS.

Basicamente, existem quatro problemas que a MSFT tem que corrigir (a) às vezes simplesmente não instala o rc.exe, (b) ele não instala o rc.exe se você "só" pede o material c ++, você deve perguntar para tudo (c) o pipeline uninstall-install parece estar todo bagunçado de várias maneiras (d) mesmo que ele instale o rc.exe aleatoriamente para você, ele esquece ou corrompe o caminho.

: /

Longa história tediosa curta, soluções parecem incluir um ou mais de

  1. basicamente instale ou reinstale o 10.0.10011.16384 (mas apenas esse, NÃO os dois posteriores)
  2. olhe ao redor e veja se o rc.exe é simples, direto, não está lá . Em caso afirmativo, instale-o (em algum lugar, em qualquer lugar)
  3. no VS, você acha que pode instalar "apenas" o material do c ++, mas não . Na prática, você DEVE verificar sim para toda a web, material de desenvolvimento blá blá. Isto parece dar-lhe "mais esperança" de obter rc.exe. Depois de fazer isso, volte ao ponto 2, pois você pode ainda não tê-lo.
  4. Depois de fazer 2, 3 e provavelmente 2 novamente, você provavelmente ainda não terá em seu caminho real. Eu adoraria saber qual é o melhor lugar "natural" para tê-lo em seu caminho, mas isso parece ser uma causa perdida. Basta enfiá-lo em seu caminho em algum lugar, em qualquer lugar.
  5. Crie um arquivo cmake simples em algum lugar - e teste-o funciona.

. . . . . .

[*] pode vir com o VS 2017, e não se esqueça que o VS 2017 pode ser instalado com outra coisa, Unity, etc.


Passou algum tempo olhando para isso em três máquinas com Win10 Creators Edition e VS2010, VS2013, VS2015 e VS2017 instalado, onde funciona em duas máquinas e falha no terceiro. Todos tinham o VS2015 Update 3 e todos deveriam ter sido instalados com as mesmas opções.

Executando o seguinte arquivo em lotes

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat

deve configurar o ambiente correto para o ambiente VS2015 x64. Isso deve adicionar

C:\Program Files (x86)\Windows Kits\10\bin\x64

para o caminho. É aqui que o rc.exe deve estar. No entanto na minha máquina com falha rc.exe estava faltando a partir daqui, mas existia em

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64

Voltei e sentindo que esta era uma questão de configuração eu re-executei a configuração do VS2015 Update 3 e disse-lhe para adicionar

Windows e Desenvolvimento Web -> Ferramentas Universais de Desenvolvimento -> Ferramentas (1.4.1) e Windows 10 SDK (10.0.14393)

isso causou rc.exe e arquivos relacionados para aparecer em

C:\Program Files (x86)\Windows Kits\10\bin\x64

Correndo rc -v on

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\rc.exe

e

C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe

deu o mesmo número de versão 10.0.10011.16384

Não tenho certeza porque rc.exe estava faltando a instalação original, mas re-executando a instalação e adicionando o outro SDK corrigido para mim. Parece que

C:\Program Files (x86)\Windows Kits\10\bin\x64\rc.exe

deve ser o rc.exe padrão, mas não foi configurado por uma instalação anterior.


Problema semelhante com a Comunidade 15.4.5 VS2017 com o Windows Sdk versão 10.0.16299.0, mas apenas para construções via TeamCity; constrói a partir do VS funcionam bem e construindo com o MSBuild ao iniciar a partir de um prompt de comando do desenvolvedor VS. Então isso não responde exatamente a pergunta do OP, mas é tão similar e esta é uma das primeiras correspondências de pesquisa, então eu adicionarei aqui.

Encontrou uma solução que não requer modificação da instalação de forma alguma (sem vinculação / cópia, portanto, menos sujeita a erros e fácil de automatizar):

defina a variável de ambiente VisualStudioVersion para 15.0 .

Você poderia fazer isso globalmente usando o padrão Windows GUI para isso (exemplo para o Windows 10 here ), mas eu aconselho fortemente contra isso, porque ele poderia interferir com outras versões do VS, além disso, não é uma mudança que é facilmente automatizada nem verificada em seu código de construção e, portanto, mais difícil de reproduzir omn máquinas diferentes. Uma alternativa melhor é definir isso na linha de comando em que a compilação é executada (cmd: set VisualStudioVersion=15.0 PS: $env:VisualStudioVersion = '15.0' em TeamCity: add env.VisualStudioVersion Parameter). Outra alternativa é passar esse diretório para o MSBuild como uma propriedade (passe /p:VisualStudioVersion=15.0 ou em teamCity add system.VisualStudioVersion ).





visual-studio-2017