Como corrigir o arquivo .pch ausente na compilação?

164

Quando crio minha solução c ++ no Visual Studio, ele reclama que o arquivo xxxxx.pch está ausente. Falta uma configuração para recuperar os cabeçalhos pré-compilados?

Aqui está o erro exato da integridade:

Error   1   fatal error C1083: Cannot open precompiled header file: 'Debug\xxxxx.pch': No such file or directory
Sam Mackrill
fonte
1
você precisa fornecer mais informações. que erro exatamente você está recebendo? como seu projeto está configurado atualmente?
Assaf Lavie
Apenas uma simples reconstrução resolveu meu problema.
Deqing

Respostas:

436

NOTA: Versões posteriores do IDE podem usar "pch" em vez de "stdafx" nos nomes padrão dos arquivos relacionados. Pode ser necessário substituir o pda por stdafx nas instruções abaixo. Peço desculpas. Não é minha culpa.

  1. Clique com o botão direito do mouse no seu projeto no Solution Explorer.
  2. Clique em Propriedades na parte inferior do menu suspenso.
  3. No canto superior esquerdo das Páginas de propriedades, selecione Todas as configurações no menu suspenso.
  4. Abra a árvore C / C ++ e selecione Cabeçalhos pré-compilados
  5. Cabeçalho pré-compilado: selecione Usar (/ Yu)
  6. Preencha o campo Arquivo de cabeçalho pré-compilado. O padrão é stdafx.h
  7. Clique em OK

  8. Se você não possui stdafx.h nos arquivos de cabeçalho, coloque-o lá. Edite-o para # incluir todos os cabeçalhos que você deseja pré-compilados.

  9. Coloque um arquivo chamado stdafx.cpp em seu projeto. Coloque #include "stdafx.h" na parte superior e nada mais.
  10. Clique com o botão direito do mouse em stdafx.cpp no ​​Solution Explorer. Selecione Propriedades e Todas as configurações novamente, como na etapa 4 ...
  11. ... mas desta vez selecione Criar cabeçalho pré-compilado (/ Yc). Isso será vinculado apenas ao arquivo stdafx.cpp.
  12. Coloque #include "stdafx.h" no topo de todos os seus arquivos de origem.

Sorte 13. Cruze os dedos e pressione Build.

Jive Dadson
fonte
58
Eu não sabia que stdafx.cpp deveria ter uma configuração diferente. Ótima resposta.
expert
5
Essa deve ser a resposta aceita, pois o outro está faltando as etapas 10 e 11. Obrigado!
precisa saber é o seguinte
2
Esta é uma resposta mais básica que a minha. As etapas 1 a 7 são necessárias para que o PCH funcione, mas a mensagem de erro da pergunta indica que essas etapas já foram executadas. OTOH, ele assume um único stdafx.pcharquivo, enquanto o xxxxx.pchda pergunta sugere um problema mais complexo (configuração multi-PCH).
MSalters
1
Esta resposta realmente salvou o dia. Obrigado.
Matt Craig
Obrigado senhor! Voltando ao meu C / C ++ raízes r para um novo projeto e eu sinto um pouco de um spaz
Colby Africa
59

O uso do cabeçalho pré-compilado (pch) é um processo de duas etapas.

Na etapa um, você compila um arquivo stub (no VS200x, geralmente é chamado stdafx.cpp. As versões mais recentes usam pch.cpp.). Esse arquivo stub indiretamente inclui apenas os cabeçalhos que você deseja pré-compilados. Normalmente, um cabeçalho pequeno (geralmente stdafx.hou pch.hpp) lista os cabeçalhos padrão, como <iostream>e <string>, e isso é incluído no arquivo stub. Compilar isso cria o arquivo .pch.

Na etapa 2, seu código-fonte real inclui o mesmo cabeçalho pequeno da etapa 1 que o primeiro cabeçalho. O compilador, quando encontra esse cabeçalho especial, lê o arquivo .pch correspondente. Isso significa que ele não precisa (re) compilar esses cabeçalhos padrão sempre.

No seu caso, parece que a etapa 1 falha. O arquivo stub ainda está presente? No seu caso, isso provavelmente seria xxxxx.cpp. Deve ser um arquivo compilado /Yc:xxxxx.pch, pois esse é o sinalizador do compilador para indicar que é a etapa 1 do processo PCH. Se xxxxx.cppestiver presente e for um arquivo stub, provavelmente está faltando sua /Yc:opção de compilador.

MSalters
fonte
13
provavelmente está faltando a opção do compilador / Yc:. A propósito, a opção está localizada em Páginas de propriedades do projeto / Propriedades de configuração / C-C ++ / Cabeçalhos pré-compilados
wip
22

Consertar:

  1. Verifique se você possui xxxxx.cpp em seu projeto

  2. Compile xxxxx.cpp com o sinalizador / Yc ( Criar cabeçalho pré-compilado)
    (clique com o botão direito do mouse em xxxxx.cpp -> propriedades -> Cabeçalhos pré-compilados -> criar )

  3. Compile todos os outros arquivos com o sinalizador / Yu ( Usar Cabeçalho Pré-compilado)
    (clique com o botão direito do mouse em projeto -> propriedades -> Cabeçalhos Pré-compilados -> uso )

franckspike
fonte
Isso me consertou. Muito obrigado!
CharlesW
7
  1. Clique com o botão direito do mouse no projeto e selecione o item de menu de propriedades
  2. ir para C / C ++ -> Cabeçalhos pré-compilados
  3. Selecione Não usando cabeçalhos pré-compilados
jpabess
fonte
Isso funcionou para mim. Eu havia excluído "stdafx.cpp" e, quando o adicionava novamente, esse erro não desaparecia até eu desligar os cabeçalhos pré-compilados. De qualquer forma, o projeto é minúsculo, por isso não é como se isso fizesse muita diferença na velocidade.
Contango 13/09/12
3
4. SelecioneCreate (/Yc) (para restaurar e depois usá-lo novamente)
Bitterblue 15/04
2

Sim, pode ser eliminado com as opções / Yc, como outras pessoas apontaram, mas provavelmente você não precisaria tocá-lo para corrigi-lo. Por que você está recebendo esse erro em primeiro lugar sem alterar nenhuma configuração? Você pode 'limpar' o projeto e tentar compilar um único arquivo cpp. Você receberia esse erro nesse caso porque o cabeçalho do pré-compilador está ausente. Basta criar o projeto inteiro (mesmo que não tenha êxito) e, em seguida, criar qualquer arquivo cpp único e você não receberá esse erro.

zar
fonte
2

Caso isso esteja acontecendo com você em uma compilação de servidor (AppCenter) e você estiver usando o CocoaPods, verifique se o seu Podfile está registrado.

O AppCenter executa apenas o comando "pod install" se encontrar um Pofile e NÃO encontrar a pasta PODS nos arquivos.

Eu fiz o check-in da pasta, mas como o git ignora automaticamente os arquivos .pch (verifique se você gitignore para muito menos isso), meu .pch não estava sendo verificado.

Classifiquei meu problema forçando os arquivos .pch a verificá-lo, mas a exclusão da pasta PODS também deve funcionar, pois o Appcenter executará o comando pod install nesse caso.

Felizmente, isso ajuda alguém.

Marco Leite
fonte
0

Se tudo estiver certo, mas esse erro estiver presente, ele precisará verificar a próxima seção no arquivo ****. Vcxproj:

<ClCompile Include="stdafx.cpp">
  <PrecompiledHeader Condition=

No meu caso, havia um nome incorreto de uma configuração: apenas a primeira palavra.

Sergey ArcTechno
fonte
0

Eu sei que esse tópico é muito antigo, mas eu estava lidando com isso no VS2015 recentemente e o que ajudou foi excluir as pastas de compilação e recriá-la. Isso pode ocorrer devido à tentativa de fechar o programa ou a um programa que interrompe / congela o VS durante a criação.

glover12
fonte
Sim, mas a pergunta original tinha a ver com o VS2008, não o VS2015. Você tem certeza de que isso resolveria o problema do OP?
T-Heron
Independentemente da versão do VS, o problema ainda ocorre em diferentes compilações. Apenas tente isso e veja se funciona para qualquer um com quem você esteja lidando.
glover12
0

Eu estava procurando o arquivo PCH do iOS com o mesmo problema. Se você também chegou aqui, a solução que eu encontrei foi limpando os dados derivados; Feche o (s) simulador (es), vá para xCode prefs -> locais -> vá para o caminho do arquivo de dados derivado, feche o xCode, exclua os arquivos da pasta de dados derivados, reinicie e aplique :)

Ahmed Awad
fonte
-1

Tente Criar> Solução limpa e, em seguida, Criar> Criar solução. Isso funciona para mim.

Nick Dong
fonte