Я просто загрузил некоторые новые заголовочные файлы, и имейте папку их, что я хочу сделать доступным. Во-первых, я хотел бы сделать их доступными для любого файла, желающего использовать их. Так, я хотел бы смочь включать новый заголовочный файл (назовите его newheader.h), где я хочу, точно так же, как math.h, например. Куда я должен поместить его?
Во-вторых, я хочу сделать эти файлы доступными для всех пользователей. У меня есть корневые полномочия. Существует ли специальный каталог, я должен вставить его? Большое спасибо!
Сохраните их в /usr/local/include
. Из http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/usr.html объекты в этом каталоге "... безопасны от того, чтобы быть перезаписанным, когда системное программное обеспечение обновляется", который важен, так как Вы не хотите файлы заголовков, которые Вы загрузили, чтобы быть ударенными системными обновлениями, которые могли бы произойти, если Вы вставляете их /usr/include
.
Обычно мы не кодируем в вакууме и что мы пишем, основано на том, что другие записали перед нами. При принятии программ C и связанного заголовка (.h
) файлы создаются на другой программной системе затем, необходимо смоделировать структуру каталогов после их.
, Так как я понятия не имею о Вашей среде, позволяет, берут общую программу и видят, какую структуру каталогов они использовали для их заголовочных файлов:
$ `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.
у меня нет специального C или библиотек заголовка, установленных в моей системе, таким образом, все должны смочь копировать этот поиск "из поля".
, Когда Вы выполняете развертку в: /usr/include/x86_64-linux-gnu/c++/5
Вы замечаете, что заголовочные файлы включены с программами C. Таким образом, нет жесткого правила, что заголовки должны быть в их собственном каталоге.
Когда дело доходит до программирования можно поместить файлы где угодно, Вы хотите и называете их чем-либо, что Вы хотите. Конечно независимо от того, что Вы решаете, это должно иметь смысл Вам и Вашим коллегам.
Проверка, где заголовочные файлы хранятся теперь:
$ 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
Это - просто верхняя часть моего списка. Это продолжается экстенсивно.
На основе существующих местоположений заголовочного файла, я был бы склонен создать каталог:
/usr/include/ourcompany/
для хранения всего заголовка (.h
) файлы.
Однако, поскольку другие указали, что популярное местоположение:
/usr/local/include/
В эта статья , записанная Richard Stallman и другими, они пишут:
По умолчанию, gcc ищет следующие каталоги заголовочные файлы:
/usr/local/include/
/usr/include/
и следующие каталоги для библиотек:
/usr/local/lib/
/usr/lib/
В МОЕЙ системе, /usr/local/include/
каталог существует и пуст. В Стандарте Иерархии Filsystem говорится, что (FHS 3.0) каталог для использования /usr/local/include
. Файлы должны быть читаемыми миром (0444
) и каталоги должны быть доступными для поиска (0555
).
Вопрос, чего Вы хотите достигнуть?
Обычно у Вас есть три сценария:
$HOME
)Для первых 2 необходимо, вероятно, использовать -I
переключатель для предоставления пути к заголовкам. Первое, вероятно, было бы -I../mylib/include
, второе может быть -I/home/user/local_libs/somelib/include
.
Третий является глобальной установкой, которая должна разместить их в /usr/local/include
, но управляемый инструментом любят, автоделают или cmake. При упаковке специалист по обслуживанию должен адаптировать installpath и/или включать путь для установки заголовков на /usr/include
.
Когда использование автоделает, у Вас могут быть уведомления, чем --prefix
значения по умолчанию параметра к /usr/local
для безопасной установки, которая не вмешивается в системные пакеты, в то время как т.е. debian выполненные специалисты по обслуживанию ./configure --prefix=/usr
в их сценариях пакета. Включать путь создается из этого префикса, таким образом, он следует за установкой пакета.