Imitando (mas não duplicando) nomes de diretório
Geralmente não codificamos no vácuo e o que escrevemos é baseado no que os outros escreveram antes de nós. Supondo que seus programas em C e os arquivos de cabeçalho (
.h
) sejam construídos sobre outro sistema de software, então você deve modelar sua estrutura de diretórios após a deles.
Como não tenho ideia do seu ambiente, vamos pegar um programa comum e ver qual estrutura de diretórios eles usaram para os arquivos de cabeçalho:
$ 'gcc -print-prog-name=cc1plus' -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/5
/usr/include/x86_64-linux-gnu/c++/5
/usr/include/c++/5/backward
/usr/lib/gcc/x86_64-linux-gnu/5/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
/usr/include
End of search list.
Não tenho bibliotecas C ou de cabeçalhos especiais instaladas em meu sistema para que todos possam replicar essa pesquisa "fora da caixa".
Quando você detalha: /usr/include/x86_64-linux-gnu/c++/5
, percebe que os arquivos de cabeçalho estão incluídos nos programas em C. Portanto, não há regra rígida e rápida de que os cabeçalhos precisam estar em seu próprio diretório.
Quando se trata de programação, você pode colocar arquivos em qualquer lugar que quiser e chamá-los como quiser. É claro que o que você decidir, deve fazer sentido para você e seus colegas de trabalho.
Onde os arquivos de cabeçalho são armazenados agora
Verifique onde os arquivos de cabeçalho estão armazenados agora:
$ locate *version.h*
/lib/firmware/carl9170fw/include/shared/version.h
/usr/include/linux/version.h
/usr/include/linux/dvb/version.h
/usr/include/x86_64-linux-gnu/gnu/libc-version.h
/usr/lib/python3/dist-packages/lxml/includes/lxml-version.h
/usr/lib/x86_64-linux-gnu/perl/5.22.1/CORE/git_version.h
/usr/src/linux-headers-3.16.53-031653/include/uapi/linux/dvb/version.h
/usr/src/linux-headers-3.16.53-031653/include/xen/interface/version.h
/usr/src/linux-headers-3.16.53-031653-generic/include/config/localversion.h
/usr/src/linux-headers-3.16.53-031653-generic/include/config/arch/want/compat/ipc/parse/version.h
/usr/src/linux-headers-3.16.53-031653-generic/include/config/isdn/diversion.h
/usr/src/linux-headers-3.16.53-031653-generic/include/generated/uapi/linux/version.h
/usr/src/linux-headers-4.10.0-28/include/uapi/linux/dvb/version.h
/usr/src/linux-headers-4.10.0-28/include/xen/interface/version.h
/usr/src/linux-headers-4.10.0-28-generic/include/config/localversion.h
/usr/src/linux-headers-4.10.0-28-generic/include/config/arch/want/compat/ipc/parse/version.h
/usr/src/linux-headers-4.10.0-28-generic/include/config/isdn/diversion.h
/usr/src/linux-headers-4.10.0-28-generic/include/generated/uapi/linux/version.h
Este é apenas o topo da minha listagem. Continua extensivamente.
Com base nos locais de arquivo de cabeçalho existentes, eu estaria inclinado a criar o diretório:
/usr/include/ourcompany/
para armazenar todos os arquivos de cabeçalho ( .h
).
Considere o caminho de pesquisa padrão
No entanto, como outros apontaram uma localização popular é:
/usr/local/include/
Em este artigo escrito por Richard Stallman e outros, eles escrevem:
Por padrão, o gcc procura nos seguintes diretórios por arquivos de cabeçalho:
/usr/local/include/
/usr/include/
e os seguintes diretórios para bibliotecas:
/usr/local/lib/
/usr/lib/