| |
Существует множество терминов, которые часто используются при обсуждении утилит для разработки программ. Большинство общих терминов используется для обозначения множества понятий с различными значениями, что вызывает путаницу. Обычно мы угадываем их значение из контекста и чаще всего неправильно.
В этом документе используется сравнительно мало терминов с целью определения понятий настолько точно, насколько это возможно для передачи назначений и условий использования этих утилит.
Программы работают на машинах. Они почти всегда записаны в исходных текстах и строятся из них. Компиляция - это процесс, которым часто, но не всегда создаются программы.
Здесь слово "основная" относится к среде, в которой будут откомпилированы эти исходные тексты. Имя основной среды не имеет отношения к имени Вашей главной машины, например, ucbvax, prep.ai.mit.edu или att.com. Вместо них оно относится к sun4 или dec3100.
Забудем на минуту, что в нашем каталоге исходных текстов находится исходный текст для среды разработки программ. Предположим, что это исходный текст для более простой прикладной программы, скажем, калькулятора. Исходные тексты, которые можно компилировать в различных средах, обычно требуют установок для каждой среды. Мы называем этот процесс конфигурацией. Это конфигурация исходного текста для среды.
Например, если нам требуется конфигурация нашего воображаемого калькулятора для компилирования на SparcStation, мы должны конфигурировать для среды sun4. Т.е. с нашей системой конфигурации:
cd desk-calculator ; ./configure sun4
"configure" - это программы на языке оболочки Unix, которые
устанавливают Makefiles (файлы для утилиты "make"), подкаталоги и
символические ссылки для компилирования на sun4.
Основная среда не обязательно привязана к той машине, на которой были откомпилированы утилиты; можно имитировать основную среду sun3 на sun4. Если мы хотим использовать кросс-компилятор на sun4 для компилирования программ, предназначенных для работы на sun3, мы сконфигурируем исходный текст для sun3:
cd desk-calculator ; ./configure sun3
Известно, что в действительности при компилировании на sun4,
исходному коду безразлично, что кросс-компилятор для sun3 представляет
собой среду, только похожую на sun3. Т.е. среда неотличима от sun3,
если заглавные файлы, предопределенные символы и библиотеки похожи на
те, что у sun3.
Основная среда не имеет отношения к машине, на которой будет работать созданная программа. На sun4 можно обеспечить эмуляцию среды sun3, и программы, скомпилированные на sun3, будут работать на sun4. Эта практика часто используется в индивидуальных программах для компенсации отличий различных архитектур и операционных систем. Например, некоторые операционные системы не обеспечивают функцию bcopy, и она эмулируется, используя функцию memcpy.
Основная среда - это просто среда, в которой будет скомпилирована эта программа.
Многие программы имеют опции времени компиляции. Это возможности программы, которые могут быть встроены в программу и зависят от выбора человека, проводящего компиляцию. Мы определяем это как опции конфигурации. Например, наш калькулятор возможно скомпилировать в программу, которая использует инфиксную или постфиксную запись как параметры конфигурации. Чтобы выбрать инфиксную запись при работе на sun3:
./configure sun3 --enable-notaion=infix
а постфиксную для sun4:
./configure sun4 --enable-notaion=postfix
Если мы хотим получить обе одновременно, то промежуточные части,
используемые при компиляции, нужно записывать отдельно.
Следующие команды:
mkdir ../objdir.sun4
(cd ../objdir.sun4 ; ../configure sun4 --enable-notation=postfix --srcdir=../ scr)
mkdir ../objdir.sun3
(cd ../objdir.sun3 ; ../configure sun3 --enable-notation=infix --srcdir=../ scr)
создадут подкаталоги для промежуточных частей конфигураций для
sun4 и sun3. Это необходимо, так как предыдущие системы были способны
только на одну конфигурацию одновременно, иначе вторая конфигурация
будет записана поверх первой. Нам нужно сохранить описанные изменения,
которые мы получили во время конфигурации; порядок аргументов не
важен, но должен присутствовать аргумент без '-', который будет именем
основной среды.
Основываясь на этих примерах, будем предполагать, что нам необходимо построить утилиты на каком-то месте, и не использовать параметр --srcdir, но будем помнить о нем.
Для инсталяции программы конфигурирующей системе необходимо знать, где Вы хотите ее установить. По умолчанию она будет храниться в '/usr/local'. Мы ссылаемся на это расположение с помощью '$(prefix)'. Все запускаемые пользовательские программы будут установлены в '$(prefix)/bin'. Все другие программы и файлы будут установлены в подкаталоге '$(prefix)/lib'.
Вы можете сменить '$(prefix)' только как параметр конфигурации:
./configure sun4 --enable-notation=postfix --prefix=/local
Сконфигурируйте исходный текст следующим образом:
make install
Это распределит программу в каталогах '/local/bin' и
'/local/lib/gcc'. Если Вы смените '$(prefix)' после компилирования
исходного текста, Вам необходимо набрать:
make clean
перед тем как будут произведены изменения, так как некоторым
утилитам необходимо знать положение других утилит.
Зная эти понятия, мы можем отбросить пример с калькулятором и перейти к прикладным программам в этих каталогах, а точнее, к исходному тексту для среды разработки программ.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |