Ao compilar um arquivo de origem muito simples com o gcc, não preciso especificar o caminho para os arquivos de inclusão padrão, como stdio ou stdlib.
Como o GCC sabe como encontrar esses arquivos?
Possui o /usr/include
caminho conectado por dentro ou obtém os caminhos de outros componentes do SO?
cpp -v /dev/null -o /dev/null
Existe um comando com uma saída mais curta, que permite cortar automaticamente os caminhos de inclusão das linhas, começando com um único espaço:
O crédito vai para a primeira página da libc ++ .
fonte
Embora eu concorde com a resposta de Ihor Kaharlichenko por considerar C ++ e com a resposta de abyss.7 pela compacidade de sua saída, eles ainda estão incompletos para as versões multi-arch do gcc porque o processamento de entrada depende dos parâmetros e macros da linha de comando.
Exemplo:
echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -specs=nano.specs -mcpu=cortex-m4 -march=armv7e-m -mthumb -mfloat-abi=soft -x c++ -E -Wp,-v\ - -fsyntax-only
rendimentosenquanto que os
echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -x c++ -E -Wp,-v - -fsyntax-only
rendimentosA primeira chamada utiliza
newlib
(consulte as linhas 1 e 3 da saída), a segunda segue as inclusões padrão. Os arquivos comuns no final da lista são um exemplo para o uso deinclude_next
.Conclusão: sempre considere todas as macros e opções do compilador ao imprimir os diretórios de inclusão.
fonte
Basta executar o seguinte para listar os caminhos de pesquisa padrão:
fonte
cc1
normalmente não pode ser chamado diretamente porque é um comando interno que não está no PATH. Talvez você queira editar sua resposta para descrever onde encontrar o arquivo.