2008-10-21 3 views
2

На днях я установил установку unbuntu в виртуальной машине и пошел собирать инструменты и библиотеки, которые, как я полагал, мне понадобится для программирования moslty на C++.Конфигурация среды программирования Linux

У меня возникла проблема, если бы вы могли разместить такие вещи, как исходные библиотеки сторонних разработчиков и т. Д. Из того, что я могу собрать, многие дистрибутивы источников предполагают, что многие их зависимости уже установлены в определенном месте и принимают что в некоторых местах также установлено множество инструментов.

Чтобы привести пример того, что я сейчас делаю в Windows, есть ли у меня каталог, в котором я храню весь исходный код. C: \ код. В этом каталоге у меня есть каталог для всех сторонних библиотек, c: \ code \ thirdparty \ libs. Таким образом, я могу легко установить относительные пути для всех зависимостей любых проектов, которые я пишу или встречаю, и хочу скомпилировать. Причина, по которой я заинтересован в настройке среды программирования linux, состоит в том, что кажется, что проблемы с инструментами и библиотекой решаются эффективно, что упрощает создание, например, OpenSSH из исходного кода.

Так что я искал достойную конвецию, которую я могу использовать, когда пытаюсь оградить свои проекты и библиотеки от linux, который прост в обслуживании и прост в использовании.

ответ

5

Для библиотек/включает в себя ...

/usr/local/lib 
/usr/local/include 
1

Ubuntu = Debian = APT-получить благость

Начните с Linux Utilities:

%> sudo apt-get install util-linux 
6

Короткий ответ: не делать " кучи кода в локальном каталоге ".

Долгий ответ: не делайте «кучи кода в локальном каталоге», потому что это будет кошмар, чтобы быть в курсе последних событий, и если вы решите распространять свой код, это будет кошмар для упаковки это для любого достойного распределения.

По возможности, придерживайтесь библиотек, отправленных в дистрибутив (у ubuntu есть 20000+ пакетов, он должен иметь большую часть того, что вам нужно предварительно упаковать). Если пакет отсутствует, вы можете вручную установить его в/usr/local (но см. Выше об обновлениях и DONT).

Лучше, используйте «stow» или «installwatch» (или оба) для установки в библиотеки библиотек для каждой библиотеки (/ usr/local/stow/libA-ver123), а затем файлы symlink оттуда в/usr/local или/usr/(stow делает симлинку). Или просто упакуйте lib для вашего дистрибутива.

3

Где возможно код для библиотек, предоставленных системой/дистрибутивом. Это облегчает отправку продукта на этот дистрибутив.

Однако, если вы создаете коммерческое приложение, потому что существует так много разновидностей дистрибутивов Linux, что может означать, что вам нужно поддерживать множество различных сборок приложений для каждого дистрибутива. Что не обязательно плохо, поскольку это означает, что вы можете более четко интегрироваться с системой управления пакетами дистрибутива.

Но в случае, если вы не можете сделать это, достаточно просто загрузить источник каждой зависимой от вас сторонней зависимости и интегрировать построение этой зависимости в статическую библиотеку, связанную с вашим исполняемым файлом. Таким образом, вы точно знаете, с чем вы связываетесь, но имеет недостаток в раздувании вашего исполняемого файла. Это также может потребоваться, если вам нужна конкретная библиотека (или версия), не предоставленная дистрибутивом.

Если вы хотите, чтобы ваш код основывался на широком спектре различных систем Unix, вы, вероятно, будете разумно смотреть в GNU autoconf и automake. Они помогут вам построить сценарий configure и makefile для вашего проекта, чтобы он строился практически на любой системе Unix.

Также обратите внимание на pkg-config, который сейчас используется в дистрибутивах Linux, чтобы помочь вам включить ссылки на нужные библиотеки (для библиотек, поддерживающих pkg-config).

Если вы используете подрывную деятельность для управления своим источником, существует «соглашение», которое большинство репозиториев subversion используют для управления собственным кодом и кодом «поставщика».

Большинство репозиториев svn имеют дерево «vendor» (которое идет вместе с багажником, ветки & тегов деревьев). Это верх для всех сторонних поставщиков кода. В этом каталоге у вас есть каталоги для каждой используемой библиотеки. Например:

branches/ 
tags/ 
trunk/ 
vendor/somelib 
vendor/anotherlib 

Под каждый из этих LIBS представляет собой каталог для каждой версии библиотеки и «текущей» директории для большей версии уточненных в вашем хранилище.

vendor/somelib/1.0 
vendor/somelib/1.1 
vendor/somelib/current 

Затем дерево вашего проекта должен быть изложено что-то вроде этого:

ствола/источник # всего код здесь ствола/LIBS # все коды поставщика здесь

Каталог ЛИЭСА должен быть пустым, но он будет иметь svn:externals мета-данные, связанные с ним, с помощью:

svn propedit svn:externals trunk/libs 

содержание этого имущества будет какая-то вещь вдоль линий (предполагается, что диверсия 1.5):

^/vendor/somelib/current somelib 
^/vendor/anotherlib/1.0 anotherlib 

Это означает, что, когда вы извлекаете ваш код подрывной также проверяет ваши библиотеки поставщика в каталог ствола/Libs. Так что, когда проверили это выглядит следующим образом:

trunk/source 
trunk/libs/somelib 
trunk/libs/anotherlib 

Это описано (вероятно, намного лучше) в Subversion Book. В частности, раздел по обработке vendor branches и externals.

Смежные вопросы