Eu não acho que haja uma maneira particularmente boa de ignorá-lo totalmente (é possível com a opção gcc nostdinc
, mas você precisará adicionar -I para todos os caminhos necessários).
No entanto, existe uma maneira fácil de forçar o compilador a escolher o que você deseja. De acordo com o link , a ordem normal dos caminhos de inclusão é:
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
Presumivelmente, isso é para permitir que você substitua facilmente uma inclusão do sistema por uma do usuário local. Mas o que supera todos esses é -I, então se você compilar:
gcc -I/usr/include/sys
Em seguida, ele selecionará cdefs.h de lá. Ele não eliminará / usr / local / include do caminho, portanto, se houver outros arquivos que se encaixem nessa categoria, talvez seja necessário mais -Is. Eles não são recursivos, portanto, por exemplo:
gcc -I/usr/include
Não priorizará / usr / include / sys, assim como a outra versão não priorizará / usr / include. Então você pode precisar de:
gcc -I/usr/include -I/usr/include/sys
Usar um makefile torna esse tipo de coisa significativamente mais fácil, a propósito. Eventualmente você vai querer aprender como fazer isso.
Pode haver alguns outros problemas com os quais você vai se deparar, seja qual for a razão para ter esse cabeçalho duplicado, mas você terá que explicar isso. Este é o seu sistema?