Команда configure в linux
./configure
чтобы сконфигурировать сборку Gwyddion .
Если configure пишет об отсутствии требуемых пакетов, установите эти пакеты и перезапустите её. То же самое справедливо и для случая, если configure заканчивается успешно, но вы обнаружили, что забыли установить опциональный компонент, с которым хотели собрать Gwyddion . Возможно, что пакет не был найден или был неправильно определён даже если вы его установили, а именно если он был установлен в нестандартный каталог. В этом случае необходимо настроить определённые переменные окружения чтобы дать configure возможность найти эти пакеты:
Большинство пакетов идут вместе с так называемыми файлами pkg-config ( .pc ), которые описывают как программы должны собираться и линковаться с ними. configure использует информацию из этих файлов, следовательно, PKG_CONFIG_PATH должна быть установлена таким образом, чтобы там были перечислены все нестандартные какталоги с нужными файлами pkg-config. Чтобы добавить, например, установленную библиотеку GTK+ в /opt/gnome и установленную библиотеку FFTW3 в $HOME/opt/fftw3 , нужно выполнить:
PKG_CONFIG_PATH=/opt/gnome/lib/pkgconfig:$HOME/opt/fftw3/lib/pkgconfig
export PKG_CONFIG_PATH
Может потребоваться настроить эти переменные чтобы включить нестандартные каталоги с исполняемыми файлами и библиотеками соответствующих пакетов. Переменные LD_LIBRARY_PATH и DYLD_LIBRARY_PATH обе задают путь поиска для разделяемых библиотек, но первая используется в системах на основе Linux и BSD, в то время, как вторая на OS X.
Может потребоваться настроить эти переменные чтобы включить нестандартные каталоги с заголовочными файлами и библиотеками пакетов, с которыми не шло файлов pkg-config, например, для libTIFF в /usr/local можно установить:
CPPFLAGS=-I/usr/local/include
export CPPFLAGS
LDFLAGS=-L/usr/local/lib
export LDFLAGS
Опция --prefix команды configure задаёт базовый каталог установки. Компоненты программы будут установлены в его подкаталоги bin , lib , share , и т.д. (которые будут созданы если они не существуют). Более детальное управление возможно с помощью опций, задающих отдельные подкаталоги, таких как --bindir , --libdir . Префикс по умолчанию – /usr/local/bin , чтобы установить Gwyddion в домашний каталог пользователя можно использовать, например команду
./configure --prefix=$HOME/opt/gwyddion
Если вы устанавливаете Gwyddion для личного использования это является рекомендованным вариантом, поскольку в этом случае не требуется выполнять действий с правами суперпользователя.
Настройки процесса конфигурирования
Необязательные возможности можно включить/выключить с помощью опций вроде --with-foo / --without-foo или --enable-foo / --disable-foo . Например, компиляция с zlib может быть отключена командой:
./configure --without-zlib
По умолчанию все опциональные возможности включены, если найдены все требуемые для их реализации библиотеки. Краткая информация о включенных и отключенных опциональных возможностях печатается в выводе команды configure недалеко от его конца.
Полный список опций и важных переменных configure можно получить с помощью команды:
./configure --help
Список будет длинным и большая часть опций контроллирует включение/выключение отдельных опциональных возможностей или передачу необходимых флагов компиляции и связывания для различных библиотек. Например, задавая FFTW3_CFLAGS и FFTW3_LIBS можно задать (или переопределить) как будет осуществляться компиляция и связывание с FFTW3. Однако, такое ручное задание является резервным вариантом для гораздо более удобного метода, основанного на использовании pkg-config в том случае если он почему-то не работает.
Некоторые интересные общие опции описаны в следующих параграфах.
Настройки пользователей
C Gwyddion поставляются различные файлы взаимодействия со средой рабочего стола, которые определяют типы MIME, элементы меню, привязки файлов, генерацию миниатюр и т.п. Если Gwyddion устанавливается в системный каталог, они обычно находятся в правильных местах файловой системы. Однако, если вы устанавливаете его куда-то в свой каталог пользователя, то эти файлы нужно поместить в другое место. а именно в определённые скрытые каталоги, начинающиеся с точки в вашем домашнем каталоге.
Это можно задать с помощью опции --enable-home-installation команды configure . Следует отметить, что использование этой опции приводит к установке файлов в каталоги вне заданного префикса.
Настройки создателей пакетов
Если Gwyddion устанавливается во временный каталог для дальнейшего создания пакета, необходимо отключить определённые действия после установки, которые нужно производить с системой, где пакет будет установлен, а не в момент создания пакета.
Обновление файлов FreeDesktop может быть отключено с помощью --disable-desktop-file-update . Установка схем GConf2 может быть отключена с помощью --disable-schemas-install . Обычно это не надо делать в явной форме т.к. установки в временный каталог используют непустую переменную DESTDIR (см. раздел установка). Если переменная DESTDIR не пустая, система сборки пропустит автоматически действия после установки. Тем не менее, обычной причиной отключения этих действий является то. что Gwyddion устанавливается на временное место вместо финального каталога (что обычно происходит при сборке пакетов в Linux). В этом случае вспомогательные действия отключаются автоматически при непустой переменной DESTDIR (см. раздел установка) и, следовательно, нет нужды отключать их в configure .
Передавая параметр --enable-library-bloat скрипту configure заставляет связываться модулям со всеми библиотеками. Это автоматически включается на MS Windows, где это является обязательным требованием. В основанных на Unix системах, связывание модулей со всеми библиотеками, которые уже загружены основной программой только напрасно замедляет работу (как во время сборки, так и во время исполнения). Таким образом, модули не связываются непосредственно с основными библиотеками вроде GLib. если ваша система или правила сборки требуют связывания модулей со всеми библиотеками (например, в системах, основанных на AltLinux), использование этой опции включает данное поведение.
Передачей опции --disable-module-bundling команде configure можно запретить объединение всех модулей одного типа (файловых, обработки данных, . ) в одну разделяемую библиотеку, что обычно делается для сохранения места на диске и ускорения загрузки. Хотя подобное объединение не меняет функциональность, оно заметно меняет набор устанавливаемых файлов. Если вы, по той или иной причине, полагаетесь на наличие на диске файла gwyfile.so , самое время остановиться и перестать так делать. Тем не менее, можно использовать данную опцию чтобы принудительно получить традиционный вариант установки, где каждый модуль находился в отдельном файле.
Настройки для разработчиков
Если вы собираетесь накладывать патч или иным образом модифицировать исходный код Gwyddion запустите configure с опцией --enable-maintainer-mode чтобы включить различные правила обновления и пересборки, которые не используются при обычной компиляции. В зависимости от вида изменений могут понадобиться некоторые дополнительные инструменты, описанные в разделе Снимок Subversion, разработка.
По умолчанию справочное руководство по C API не пересобирается. Подготовленные файлы HTML распространяются с архивом, документация меняется редко и её генерация требует достаточно продолжительного времени. Для того, чтобы включить генерацию документации по API нужно передать опцию --enable-gtk-doc скрипту configure . Естественно, вам потребуется gtk-doc. Следует отметить, что configure предупредит вас, если вы включили режим мантейнера, но выключили gtk-doc (что может быть полезно для того, чтобы не пересобирать постоянно и бесцельно документацию). Если вы не собираетесь делать make dist , это предупреждение безвредно.
Это небольшая заметка для начинающих линуксоидов, о том что же означают эти три замечательные команды и для чего одни нужны. Начнём, как говорится, с начала. Большинство программ перед использованием надо скомпилировать, то есть преобразовать из текста понятного человеку в набор единиц и нулей, понятных компьютеру. Процесс условно разделён на три этапа: конфигурирование (configure), сборка (make) и установка (make install). Подробности под катом 🙂
./configure
Данная команда выполняет поиск необходимых для компиляции библиотек и заголовочных файлов (это для программ частично или полностью написанных на C/C++ и подобных языков), а так же настройку особых параметров или подключение специальных библиотек, в случае если ./configure обнаружит всё что ему нужно, он создаст Makefiles - файл, необходимый для сборки программы
Выполнить настройку параметров конфигуратора можно при помощи ключей и аргументов этих самых ключей, например:
./configure --prefix=/opt/my_program
При помощи ключа --prefix=<path> Вы можете указать директорию, которая в дальнейшем будет выступать как префикс для вашей программы (то есть корневая директория). Это связанно с тем что в мире Linux и не только, существует специальная Иерархия Файловой Системы (HFS) в соответствии с которой любая программа, чтобы работать без ошибок, должна быть собрана и установлена.
В файловой системе есть три основных префикса, относительно которых большинство программ конфигурируется, а именно:
- / - корневая директория операционной системы, так называемый ROOT
- /usr - директория, в которой находятся приложения пользовательского окружения
- /usr/local - дополнительная директория для пользовательских программ, собираемых вручную, специально для того чтобы операционная система не превратилась в свалку
Если открыть любую из этих директорий, то можно увидеть очень схожую структуру, как минимум там будут папки: bin, etc, include, libs, sbin.
Если запустить ./configure без ключей, то префиксом по умолчанию (директория, в которую будет установлена собираемая программа) будет /usr/local, помните это если не можете запустить свою программу, возможно у Вас не прописан путь в PATH.
Кроме ключа --prefix в конфигураторе, как правило, имеется ещё множество других ключей, посмотреть их все можно если выполнить:
./configure --help
Самая важная и простая команда/программа, выполняет запуск процедуры компиляции приложения из исходного кода. Для своей работы данная программа использует специальные файлы Makefiles, в которых подробно описан процесс сборки приложения со всеми параметрами, которые мы указали конфигуратору. Результатом успешного выполнения команды make будет собранная программа в текущей директории.
make install
Данная команда выполняет непосредственную установку приложения в указанную, на этапе конфигурирования, директорию, после выполнения команды make install вы можете запустить свежеустановленную программу.
Послесловие
Чтобы не писать три команды по очереди можно написать их в одну строку:
./configure && make && make install
&& - это оператор И пришедший из языка C/C++, однако, с точки зрения оболочки он означает то, что следующую команду нужно выполнить только в случае успешного выполнения предыдущей команды, это очень удобно если один из этапов завершается с ошибкой.
На самом деле make install так же может выполнить сборку, потому как задача install зависит от задачи all (то есть непосредственно сборки приложения), это означает что этап make можно пропустить и выполнить всего две команды, если записать их в одну строку получится:
./configure && make install
Удачи Вам! И спасибо за то что дочитали!
2 thoughts on “ Чарующая магия configure, make и make install ”
Всё, что нужно знать про эти три команды, так это то, что это отличный способ запомоить систему.
Usage: configure with-arch=ARCH_TYPE -comm=COMM_TYPE
with-device=DEVICE
with-mpewithout-mpe
disable-f77disable-f90 with-f90nagwith-f95nag
disable-f90modules
disable-gencatdisable-doc
enable-c++disable-c++
enable-mpedbgdisable- mpe dbg
enable-devdebugdisable-devdebug
enable-degubdisable-debug
enable-tracebackdisable-traceback
enable-long-longdisable-long-long
enable-long-doubledisable-long-double
-prefix=INSTALL_DIR
-c++=C++_COMPILERnoc++где Все аргументы не обязательны, но если представлены аргументы `arch' , `comm' или `prefix' ,
-opt=OPTFLAGS
-cc=C_COMPILER-fc=FORTRAN_COMPILER
-clinker=C_LINKER-flinker=FORTRAN_LINKER
-c++linker=CC_LINKER
-cflags=CFLAGS-fflags=FFLAGS -c++flags=CCFLAGS
-optcc=C_OPTFLAGS-optf77=F77_OPTFLAGS
-f90=F90_COMPILER-f90flags=F90_FLAGS
-f90inc=INCLUDE_DIRECTORY_SPEC_FORMAT_FOR_F90
-f90linker=F90_LINKER
-f90libpath=LIBRARY_PATH_SPEC_FORMAT_FOR_F90
-lib=LIBRARY-mpilibname=MPINAME
-mpe_opts=mpe_OPTS
-make=MAKEPGM
-memdebug-ptrdebug-tracing -dlast
-listener_sig=SIGNAL_NAME
-cross
-adi_collective
-automountfix=AUTOMOUNTFIX
-noranlib-ar_nolocal
-rsh=RSHCOMMAND-rshnol
-noromio-file_system=FILE_SYSTEM
-p4_opts=P4_OPTS
они должны быть единственными. `arch' должен определяться перед `comm' , если встречаются
оба аргумента.
Пакеты, которые могут включаться в mpich Вы можете использовать without-<опция> , чтобы отключить опцию (кроме device ).
Возможности, которые могут включаться в mpich
Следующие опции предназначены для разработчиков MPI и отладки configure : Вы можете использовать disable-<опция> для отключения опции.
Заметки об использовании configure :
Рекомендации по использованию GNU configure советуют не использовать его для построения различных инструментов, а лишь для контроля некоторых базовых возможностей или вложенных пакетов. Наше использование configure не следует этим правилам, поскольку configure слишком удобен, и нам требуется гибкость, позволяющая пользователю создавать варианты mpich .
Несколько заметок о параметрах командной строки:
Вы можете выбрать разные компиляторы C и Фортран, используя ключи `-cc' и `-fc' . Переменные окружения `C' и `FC' могут также содержать значения этих параметров, но они могут переопределяться скриптом configure . Использование `-cc=$CC -fc= $FC' заставит configure использовать эти компиляторы.
Если указано `-with-cross=file' , этот файл используется для кросс-компиляции. Файл должен содержать присваивания в форме
Опция `-opt' позволяет Вам задать опции оптимизации для компиляторов ( и С, и Фортран). Например, `-opt=-O' выбирает оптимизированную генерацию кода для большинства систем. `-optcc' и `-optf77' позволяют Вам задать опции только для компилятора С, либо Фортрана. Используйте
`-cflags' и `-fflags' для опций, не относящихся к компиляции.
Следует отметить, что опции `-opt' не передаются скриптам `mpicc', `mpif77', `mpiCC',
`mpif90' . Эти опции используются только при построении mpich .
Опция `-lib' позволяет Вам определить место библиотеки, котрая может понадобиться определенному устройству. Большинство устройств не требуют этой опции; см. инструкции по инсталляции для тех, которым это нужно
Опция `-make' может использоваться для выбора альтернативной программы make . Например, в системах FreeBSD, может потребоваться -make=gnumake , поскольку make , унаследованный из BSD 4.4, не поддерживает операции включения (используя вместо этого форму .include , не такую, как в других make ); опция используется в утилите wrappergen .
Опция `ar_nolocal' упреждает команду архива библиотеки от попыток использования локального каталога для временного хранения. Эту опцию нужно использовать (а) когда в разделе, на котором расположен mpich , недостаточно места (менее 20 Mb) и (b) когда места достаточно в /tmp (или в месте для помещения временных файлов по умолчанию).
Опция `-noranlib' пропускает шаг `ranlib' (необходимый в некоторых системах для создания объектной библиотеки). Это особенно полезно для систем, в которых `ranlib' необязателен (возможен, но не нужен; поскольку он возможен, configure использует его заодно), но может не сработать (некоторые `ranlib' реализованы, как скрипты с использованием `ar' ; если они не используют локальный каталог, они могут не сработать, уничтожив в процессе библиотеку, если в каталоге /tmp не достаточно места). Это встречается в некоторых OSF-системах.
Опция `-memdebug' создает избыточный отладочный код внутренней памяти. Это нужно использовать только, если Вы пытаетесь найти проблему с памятью (это может помочь найти проблемы с памятью и в коде пользователя). Запуск программ с опцией `-mpidb memdump' создает после вызова `MPI_Finalize' дамп всей занятой памяти, выделенной MPI. Например, будет указан созданный пользователем тип данных, который позже не был освобожден.
Опция `-tracing' позволяет трассировку внутренних вызовов. Это нужно использовать только для отладки самой реализации mpich .
Опция `-dlast' позволяет трассировать самые последние действия, выполненные устройством. Это может быть вывод при возникновении сигнала (типа SIGINT ), ошибки или вызова специальной процедуры. Для этой опции существуют издержки по производительности, но она может быть полезна для разработчиков, пытающихся отладить проблему.
Опция `-rsh' позволяет Вам выбрать альтернативную команду для удаленной shell (по умолчанию, configure использует `rsh' или `remsh' из переменной `PATH' ). Если Ваш shell не поддерживает опцию `-l' (некоторые AFS-версии rsh имеют этот недостаток), укажите также опцию `-rshnol' . Эти опции полезны только при построении сетевой версии mpich (т.е. ` with-device=ch_p4' ).
Специальные опции настройки:
Опция `-adi_collective' позволяет ADI предоставить некоторые коллективные операции в дополнение к базовым операциям "точка-точка". В настоящее время большинство систем не поддерживают эту опцию (она игнорируется), а на других она недостаточно протестирована.
Примерное использование configure :
Чтобы создать mpich для использования на sun4 с SunOS, в качестве устройства ch_p4 , и с каталогом установки, равным текущему каталогу:
./configure with-device=ch_p4 with-arch=sun4 makeИзвестными устройствами являются Следующие устройства поддерживались ADI-1, но сейчас не поддерживаются. Пожалуйста, свяжитесь с нами, если Вы заинтересованы помочь нам с поддержкой этих устройств:
Они больше не поставляются с дистрибутивом mpich .
Известные архитектуры включают (регистр важен) Специальные замечания:
Для многопроцессорных SGI ( with-arch=IRIX) , работающих с устройствами ch_p4 , используйте -comm=ch_p4 , чтобы отключить использование устройства коммуникации p4 через разделяемую память и -comm=shared , чтобы включить использование устройства коммуникации p4 через разделяемую память. По умолчанию используется устройство коммуникации через разделяемую память.
Остальное может быть определено.
Next: Устаревшие возможности Up: Руководство по инсталляции mpich, Previous: Общие Contents Alex Otwagin 2002-12-16
Все программы для компьютера представляют собой набор команд процессора, которые состоят из определенного набора бит. Этих команд несколько сотен и с помощью них выполняются все действия на вашем компьютере. Но писать программы непосредственно с помощью этих команд сложно. Поэтому были придуманы различные языки программирования, которые проще для восприятия человеку.
Для подготовки программы к выполнению, специальная программа собирает ее из исходного кода на языке программирования в машинный код - команды процессора. Этот процесс называется компиляция. Linux - это свободное программное обеспечение, а поэтому исходные коды программ доступны всем желающим. Если программы нет в репозитории или вы хотите сделать что-то нестандартное, то вы можете выполнить компиляцию программы.
В этой статье мы рассмотрим, как выполняется компиляция программ Linux, как происходит процесс компиляции, а также рассмотрим насколько гибко вы сможете все настроить.
Подготовка системы
Мы будем компилировать программы, написанные на Си или С++, так как это наиболее используемый язык для программ, которые требуют компиляции. Мы уже немного рассматривали эту тему в статье установка из tar.gz в Linux, но та статья ориентирована больше на новичков, которым нужно не столько разобраться, сколько получить готовую программу.
В этой же статье тема рассмотрена более детально. Как вы понимаете, для превращения исходного кода в команды процессора нужно специальное программное обеспечение. Мы будем использовать компилятор GCC. Для установки его и всех необходимых инструментов в Ubuntu выполните:
sudo apt install build-essential manpages-dev git automake autoconf
Затем вы можете проверить правильность установки и версию компилятора:
Но перед тем как переходить к самой компиляции программ рассмотрим более подробно составляющие этого процесса.
Как выполняется компиляция?
Компиляция программы Linux - это довольно сложный процесс. Все еще сложнее, потому что код программы содержится не в одном файле и даже не во всех файлах ее исходников. Каждая программа использует множество системных библиотек, которые содержат стандартные функции. К тому же один и тот же код должен работать в различных системах, содержащих различные версии библиотек.
На первом этапе, еще до того как начнется непосредственно компиляция, специальный инструмент должен проверить совместима ли ваша система с программой, а также есть ли все необходимые библиотеки. Если чего-либо нет, то будет выдана ошибка и вам придется устранить проблему.
Дальше идет синтаксический анализ и преобразование исходного кода в объектный код, без этого этапа можно было бы и обойтись, но это необходимо, чтобы компилятор мог выполнить различные оптимизации, сделать размер конечной программы меньше, а команды процессора эффективнее.
Затем все объектные файлы собираются в одну программу, связываются с системными библиотеками. После завершения этого этапа программу остается только установить в файловую систему и все. Вот такие основные фазы компиляции программы, а теперь перейдем ближе к практике.
Компиляция программ Linux
Первое что нам понадобиться - это исходники самой программы. В этом примере мы будем собирать самую последнюю версию vim. Это вполне нейтральная программа, достаточно простая и нужная всем, поэтому она отлично подойдет для примера.
Получение исходников
Первое что нам понадобиться, это исходные коды программы, которые можно взять на GitHub. Вы можете найти исходники для большинства программ Linux на GitHub. Кроме того, там же есть инструкции по сборке:
Давайте загрузим сами исходники нашей программы с помощью утилиты git:
Также, можно было скачать архив на сайте, и затем распаковать его в нужную папку, но так будет удобнее. Утилита создаст папку с именем программы, нам нужно сделать ее рабочей:
Настройка configure
Дальше нам нужно запустить скрипт, который проверит нашу программу на совместимость с системой и настроит параметры компиляции. Он называется configure и поставляется разработчиками программы вместе с исходниками. Весь процесс компиляции описан в файле Makefile, его будет создавать эта утилита.
Если configure нет в папке с исходниками, вы можете попытаться выполнить такие скрипты чтобы его создать:
Также для создания этого скрипта можно воспользоваться утилитой automake:
aclocal
autoheader
automake --gnu --add-missing --copy --foreign
autoconf -f -Wall
Утилита automake и другие из ее набора генерируют необходимые файлы на основе файла Mackefile.am. Этот файл обязательно есть в большинстве проектов.
После того как вы получили configure мы можем переходить к настройке. Одним из огромных плюсов ручной сборки программ есть то, что вы можете сами выбрать с какими опциями собирать программу, где она будет размещена и какие дополнительные возможности стоит включить. Все это настраивается с помощью configure. Полный набор опций можно посмотреть, выполнив:
Рассмотрим наиболее часто используемые, стандартные для всех программ опции:
- --prefix=PREFIX - папка для установки программы, вместо /, например, может быть /usr/local/, тогда все файлы будут распространены не по основной файловой системе, а в /usr/local;
- --bindir=DIR - папка для размещения исполняемых файлов, должна находится в PREFIX;
- --libdir=DIR - папка для размещения и поиска библиотек по умолчанию, тоже в PREFIX;
- --includedir=DIR - папка для размещения man страниц;
- --disable-возможность - отключить указанную возможность;
- --enable-возможность - включить возможность;
- --with-библиотека - подобно enable активирует указанную библиотеку или заголовочный файл;
- --without-библиотека - подобное disable отключает использование библиотеки.
Вы можете выполнить configure без опций, чтобы использовать значения по умолчанию, но также можете вручную указать нужные пути. В нашем случае ./configure есть, и мы можем его использовать:
В таком случае нам необходимо установить требуемую библиотеку. Например, программа предлагает ncurses, поэтому ставим:
sudo apt install libncurces-dev
Приставка lib всегда добавляется перед библиотеками, а -dev - означает, что нам нужна библиотека со всеми заголовочными файлами. После удовлетворения всех зависимостей настройка пройдет успешно.
Сборка программы
Когда настройка будет завершена и Makefile будет готов, вы сможете перейти непосредственно к сборке программы. На этом этапе выполняется непосредственно преобразование исходного кода в машинный. Утилита make на основе Makefile сделает все необходимые действия:
Дальше осталось установить саму программу, если вы использовали опцию prefix, чтобы не устанавливать программу в основную файловую систему, то можно применить стандартную опцию make:
После этого программа будет установлена в указанную вами папку, и вы сможете ее использовать. Но более правильный путь - создавать пакет для установки программы, это делается с помощью утилиты checkinstall, она позволяет создавать как deb, так и rpm пакеты, поэтому может использоваться не только в Ubuntu. Вместо make install выполните:
Затем просто установите получившийся пакет с помощью dpkg:
sudo dpkg install vim.deb
После этого сборка программы полностью завершена и установлена, так что вы можете переходить к полноценному использованию.
Если вы устанавливали программу с помощью make install, то удалить ее можно выполнив в той же папке обратную команду:
sudo make uninstall
Команда удалит все файлы, которые были скопированы в файловую систему.
Выводы
В этой статье мы рассмотрели, как выполняется компиляция программы Linux. Этот процесс может быть сложным для новичков, но в целом, все возможно, если потратить на решение задачи несколько часов. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение видео о том, что такое компилятор и интерпретатор:
Читайте также: