Como posso saber onde o g ++ conseguiu localizar um arquivo de inclusão? Basicamente se eu
#include <foo.h>
g ++ fará a varredura do caminho de pesquisa, usando qualquer opção de inclusão para adicionar ou alterar o caminho. Mas, no final dos dias, há uma maneira de saber o caminho absoluto de foo.h que o g ++ escolheu para compilar? Especialmente relevante se houver mais de um foo.h na miríade de caminhos de pesquisa.
Sem uma maneira de fazer isso ... há uma maneira de fazer com que o g ++ me diga qual é o caminho de pesquisa final após incluir os padrões e todas as opções de inclusão?
Respostas:
Isso fornecerá dependências de make que listam os caminhos absolutos dos arquivos de inclusão:
Se você não quiser que o sistema inclua (ou seja
#include <something.h>
), use:fonte
também imprimirá o caminho completo dos arquivos de inclusão em um formato que mostra quais cabeçalhos incluem quais
fonte
clang++ -MM -H
(que é uma combinação ligeiramente útil).clang++ -H -fsyntax-only ...
se quiser evitar a geração de arquivos de saída (funcionagcc
também).Claro uso
fonte
Se você usar
-MM
ou uma das opções relacionadas (-M
, etc), obterá apenas a lista de cabeçalhos incluídos, sem ter todas as outras saídas do pré-processador (que parece obter com ag++ -E -dI
solução sugerida ).fonte
g++ -MM t.cc
não mostra nenhuma inclusão, apenast.o: t.cc
. Precisa de algo mais?/showIncludes
opção. O MSVC irá até mesmo indentar para mostrar o aninhamento de cabeçalhos (não vejo isso-M
no GCC).