РУКОВОДСВО ПОЛЬЗОВАТЕЛЯ

Linux Edition. Revision B
перевод Балуева А. Н.

Оглавление

  • Глава 5. AUTOMAKE (только для версии PRO)

    Глава 5. AUTOMAKE (только для версии PRO)

    Введение. Что это дает?

    В начало страницы

    AUTOMAKE есть простой в употреблении инструмент для перепостроения программы после внесения изменений в ее Fortran и/или Cи исходный код. Он обследует времена создания всех исходных, объектных и модульных файлов и перекомпилирует те объектные или модульные файлы, которые не е существуют, пусты или не соответствуют исходным по дате. Проделывая все это, Automake учитывает не только изменения и добавления к файлам исходного кода, но также изменения и добавления к файлам MODULEs и INCLUDEd - даже если они вложены. Например, если изменить файлы, которые посредством INCLUDE включены в полудюжину исходных файлов, AUTOMAKE обеспечивает перекомпиляцию этих файлов. В случае Fortran 95 AUTOMAKE обеспечивает перекомпиляцию модулей с самого начала, учитывая все связи модулей.

    Как он это делает ?

    В начало страницы

    AUTOMAKE запоминает детали зависимостей в вашей программе (например, что файл A содержит по INCLUDE файл B) в специальном файле зависимостей, называемом обычно automake.dep. AUTOMAKE использует эти данные для заключения о том, какие файлы должны компилироваться, когда вы вносите изменения. В отличие от обычных утилит MAKE, которые требуют от пользователя указать зависимости явно, AUTOMAKE создает и преобразует эти данные самостоятельно. Чтобы сделать это, AUTOMAKE периодически просматривает входные файлы в поисках операторов INCLUDE и USE. Это очень быстрый процесс, который увеличивает очень немного общее время на обновление программы.

    Как его установить?

    В начало страницы

    Действия AUTOMAKE управляются конфигурационным файлом, который содержит по умолчанию имя компилятора и его параметры, правила поиска файлов INCLUDE и тому подобное. Для простых ситуаций, когда подлежащий компиляции исходный код находится в единственном каталоге и строится в одну исполнимую программу, вероятно, можно использовать системный конфигурационный файл по умолчанию. В таком случае нет нужды в настройке AUTOMAKE- только напечатайте am для обновления и вашей программы и файла зависимостей. В других случаях вы можете пожелать заменить установленные по умолчанию имя и параметры компилятора, добавить специальную команду link или изменить правило поиска файлов INCLUDE; этого можно достигнуть настройкой локальной копии конфигурационного файла AUTOMAKE. С более сложными системами, включающими исходные файлы, разбросанные по разным каталогам, также действовать подобным образом.

    Что может пойти неправильно?

    В начало страницы

    Не очень многое. AUTOMAKE очень снисходителен. Например, вы можете смешать ручные и проделываемые AUTOMAKE действия без всяких неприятных последствий. Вы можете даже уничтожить файл зависимостей без неприятных последствий, кроме небольшой паузы, во время которой AUTOMAKE регенерирует данные о зависимости. Эта процедура рекомендуется, если вы оказались в затруднительном положении.

    Запуск AUTOMAKE

    В начало страницы

    Чтобы запустить AUTOMAKE, просто напечатайте am. Если имеется конфигурационный файл (AUTOMAKE.FIG) в текущем каталоге, AUTOMAKE прочтет его.

    Конфигурационный файл AUTOMAKE

    В начало страницы

    Конфигурационный файл AUTOMAKE используется для указания процедур компиляции и компоновки и других деталей, требуемых для AUTOMAKE. Он представляет собой последовательность записей вида

                             keyword=value
                    или
                             keyword
                            
     

    где keyword есть буквенно-цифровое ключевое имя, а value есть цепочка символов, присваиваемая этому слову. Перед keyword могут стоят пробелы, если требуется. Каждая запись с '#', '!' или '*' как первым не пробелом, рассматривается как комментарий. keyword, которые могут быть вставлены в файл конфигурации, есть:

    LF95
    Эквивалент, определяющий по умолчанию команды LF95 компиляции и компоновки:
            COMPILE=@lf95 -c %fi --mod %mo
            LINK=@lf95 %ob -o %ex --mod %mo
    LF95 keyword должны появляться в любом файле automake.fig, который будет
    использоваться с LF95.
    
    
    FILES=
    Указывают имена файлов, которые являются  кандидатами на перекомпиляцию.
    Значением  может  быть  единственное имя, которое может включать wild-cards.
    Например,
              FILES=*.f90
    Вы можете также иметь кратные  FILES= specifications, разделенные ключевыми
    словами  AND:
              FILES=F90/*.F90
              AND
              FILES=F77/*.FOR
              AND
              ...
    Заметим, что с каждой новой  FILES= line  по умолчанию используется
    COMPILE= , если только новое  COMPILE= value не указано после FILES= line
    и перед  AND.
    Заметим также, что если указаны несколько  FILES= lines, то  маркер места
    вида %RF (маркеры места (place markers) поясняются в следующем разделе) нельзя
    использовать ни в каком COMPILE= lines.
    
    COMPILE=
    Указывают команду, которая должна использоваться для компиляции исходного
    файла. Команда может содержать маркеры места, которые расширяются перед
    выполнением команды. Например,
              COMPILE=@lf95 -c %fi
    
    

    Цепочка '%fi' в предыдущем примере есть маркер места (place marker), которая расширяется до полного имени файла, который должен компилироваться. Следующая таблица представляет полный список маркеров места и их смысла (meanings):

                       Table 9: COMPILE= Place Markers
    ...............................................................................
     Маркер места                         Его смысл
    ..............................................................................
        %SD        Расширяется в имя каталога, содержащего исходный файл,
                   включая заключительный  '/'.
    
        %SF        Расширяется в имя исходного файла, исключая каталог и
                   расширение имени.
    
        %SE        Расширяется в расширение имени исходного файла, включая
                   ведущее подчеркивание. Например, если файл, подлежащий
                 компиляции, есть  /source/main.for, то %SD расширяется в /source/,
                 %SF в  main и  %SE в .for.
    
        %OD        Расширяется в имя каталога, содержащего объектный код, как это
                   указывают, используя OBJDIR= command (см. ниже),  включая
                   конечный '/'.
    
        %OE        Расширяется в расширение имени объектного файла, как это
                   указывают с помощью  OBJEXT=command (см. ниже), включая ведущую
                   '.'.
    
        %ID        Расширяется в поисковый список файлов INCLUDE  (как это
                   указывают с помощью INCLUDE= (см. ниже))
    
        %MO        Расширяется в имя каталога, содержащего модули (как это
                   указывают с помощью  MODULE= (см. ниже))
    
        %RF        Расширяется в имя ответного файла, создаваемого по AUTOMAKE,
                   содержащего список исходных файлов.  Если присутствует %RF,
                   компилятор вызывается только один раз.
    
         %FI       Эквивалентно записи  %SD%SF%SE
    .................................................................................
    
    
    COMPILE=@lf95 -c %fi --mod %mo
    COMPILE=@lf95 -c @%rf -I %id
    
    Заметим, что с  LF95 параметр -c должен всегда использоваться в
    COMPILE= line.
    
    TARGET=
    Указывает имя программного или библиотечного файла, который должен быть
    построен из объектного кода.
    Заметим, что нужно также сообщить компоновщику имя целевого файла. Это можно
    сделать, используя маркер места  %EX (который расширяется в имя файла,
    указанного с использованием  TARGET=).
                             TARGET=/execs/MYPROG.EXE
    
    
    Если TARGET= keyword отсутствует, AUTOMAKE будет обновлять (update) объектный
    код программы, но не будет делать перекомпоновку (re-link).
    
    LINK=
    Указывает команду, которая может использоваться для обновления  программы
    или библиотечного файла, когда объектный код - тот, который нужен (up to date):
    
             LINK=@lf95 %ob -o %ex --mod %mo'
    
             LINK=@lf95 %rf -o %ex --mod %mo'
    
    
    Следующие маркеры места допускаются в команде, указанной в  LINK=.
    
    
                     Таблица 10: LINK= Place Markers
    
    .............................................................................
    Маркер места                    Его смысл
    ................................................................................
    %OD              Превращается  в имя каталога, содержащего объектный код, как
                     это указывается по  OBJDIR= command (cм. ниже), включая
                     конечный     '/'.
    
    %OE              Превращается в расширение имени объектного файла, как
                     это указывается в OBJEXT=command (см. ниже), включая
                     ведущую '.'.
    
    %OB              Превращается в список объектных файлов, соответствующих
                     исходным  файлам, указанным в FILES= commands.
    
    %EX              Превращается в имя исполнимого файла, как оно указано
                     в TARGET=.
    
    %MO              Превращается в имя каталога, содержащего модули (как
                     это указывается при использовании MODULE= (см. ниже))
    
    %PF              Превращается в имя ответного файла, создаваемого AUTOMAKE
                     и содержащего список объектных файлов.
    ...............................................................................
    
    
    INCLUDE=
    Может использоваться для указания поискового списка файлов INCLUDE. Если путь
    для включенного (INCLUDEd) файла не указан, AUTOMAKE прежде всего ищет в
    каталоге, который содержит исходный файл, а затем в каталогах, указываемых с
    использованием соответствующего ключевого слова. Имена каталогов должны
    разделяться двоеточиями. Например, может быть:
    
             INCLUDE=/include:/include/sys
    
    Заметим, что компилятору должно быть также сообщено, где искать включенные
    (INCLUDEd) файлы.  Это можно сделать с помощью маркера места  %ID (который
    превращается в список каталогов, указанных с помощью INCLUDE).
    
    
    SYSINCLUDE=
    Это можно использовать для списка поиска для системных  C or C++ файлов
    INCLUDE (т.е. любых, заключенных в угловые скобки, как в
                             #include 
    Если путь не указан, AUTOMAKE ищет в каталогах, указанных с этим ключевым
    словом. Он не ищет в текущем каталоге для системных файлов INCLUDE, если это
    не указано специально.  Имена каталогов после SYSINCLUDE= должны быть
    разделены двоеточиями.
    
    OBJDIR=
    Может быть использовано для указания имени каталога, где хранятся объектные
    файлы. Например,
                             OBJDIR=OBJ/
    Заключительный  '/' не обязателен.  Если  OBJDIR= не указано, AUTOMAKE
    полагает, что исходный и объектный файлы лежат в одном и том же каталоге.
    Заметим, что если исходный и объектный файл лежат не в одном каталоге,
    компилятор также должен быть извещен, куда класть объектные файлы. Это можно
    сделать с помощью маркера места  %OD  (который превращается в каталог,
    указанный при помощи  OBJDIR).
    
    OBJEXT=
    Можно использовать для указания нестандартного расширения имени объектного
    файла. Например, для указания расширения '.abc', пишите
                             OBJEXT=abc
    Этот параметр может оказаться полезным при работе с необычными компиляторами,
     но более часто нужен для разрешения  AUTOMAKE действовать с процессами,
    отличными от компиляции (например, можно использовать  AUTOMAKE для
    обеспечения того, чтобы все измененные исходные файлы были пропущены через
    препроцессор перед компиляцией).
    
    MODULE=
    Можно использовать для указания имени каталога, в котором хранятся модульные
    файлы:  MODULE=MODS/
    Заключительный  '/' не обязателен.  Если MODULE= отсутствует, AUTOMAKE считает,
    что исходные и модульные файлы хранятся в одном каталоге. Заметим, что если
    исходные и модульные файлы лежат не в одном и том же каталоге, компилятору
    должно быть сообщено, куда класть модули. Это можно сделать с помощью  маркера
    места  %MO (который превращается в каталог, указанный с помощью  MODULE=).
    
    DEP=
    Это можно использовать для подавления используемой по умолчанию зависимости
    файловых имен.  DEP=thisprog.dep побуждает  AUTOMAKE хранить данные о
    зависимости в 'thisprog.dep' вместо 'automake.dep'.
    
    QUITONERROR
    Указывает, что  AUTOMAKE должен немедленно остановиться если имеется ошибка
    компиляции.
    
    
    NOQUITONERROR
    Указывает, что  AUTOMAKE не должен останавливаться при ошибке компилятора.
    
    MAKEMAKE
    Указывает, что  AUTOMAKE должен создать текстовый файл с именем  automake.mak,
    содержащий информацию о зависимости.
    
    DEBUG
    Побуждает AUTOMAKE писать отладочную информацию в файл с именем automake.dbg.
    
    LATESCAN
    Откладывает сканирование входных файлов до возможного последнего момента и
    может в некоторых случаях устранить необходимость некоторых просмотров. Этот
    параметр несовместим с модулями Fortran 90.
    
    CHECK=
    Может использоваться для указания команд, вставляемых после каждой
    компиляции. Типичное применение состоит в проверке ошибок компиляции.
    

    Многофазная компиляция

    В начало страницы

    Иногда требуется боле чем одна фаза компиляции. Например, если исходные файлы расположены в нескольких каталогах, необходима отдельная фаза компиляции для каждого каталога. Кратные фазы также требуются, если вы имеете смешанный Cи и Fortran исходный код, или если необходимы специальные параметры компиляции для некоторых исходных файлов. Ключевое слово 'AND' можно вставить в ваш конфигурационный файл для добавления новой фазы компиляции. Можно переопределить значения FILES=, COMPILE=, INCLUDE=, OBJDIR=, OBJEXT= и MODULE= для каждой фазы. Все значения по умолчанию, используемые в предыдущей фазе, кроме OBJDIR=, действуют и для нового каталога исходных файлов. Следующий пример показывает, как это свойство можно использовать в компиляторе LF95. Те же принципы применимы к другим компиляторам на других платформах.

    ---------------------------------------------------------
    
    
                # Example Configuration file for Multi-Phase
                # Compilation
                # Compilation 1 - файлы в текущем каталоге
                LF95
                INCLUDE=/include
                FILES=*.f90
                OBJDIR=obj
                COMPILE=@lf95 -c %fi -I %id -o %od%sf%oe --tp -O1
                AND
                # Compilation 2 - файлы в  utils/
                # INCLUDE= по умолчанию прежнему значению (/include)
             # if OBJDIR= не установлено, оно будет по умолчанию  utils (NOT obj)
                FILES=utils/*.f90
                OBJDIR=utils/obj
                COMPILE=@lf95 -c %fi -I %id -o %od%sf%oe --sav --chk
                # Relink
                TARGET=a.out
                LINK=@lf95 %ob -o %ex
    
    

    Замечания по Automake

    В начало страницы

    * При исполнении AUTOMAKE выдает короткие сообщения для объяснения причин всех компиляций. Он также указывает, когда просматривает файлы в поисках операторов INCLUDE.

    * Если по какой-то причине файл зависимостей отсутствует, AUTOMAKE создает новый файл зависимостей. Исполнение первого AUTOMAKE происходит медленнее чем обычно из-за регенерации данных о зависимостях.

    * AUTOMAKE распознает операторы INCLUDE во всех общих вариантах Fortran и Cи и может использоваться с обоими языками.

    * Когда AUTOMAKE просматривает исходный ход, проверяя, содержит ли он операторы INCLUDE, он распознает следующий обобщенный формат:

    * Возможные пробелы в начале строки с последующими возможными управляющими символами компилятора, '%', '$' или '#', за которыми следует слово INCLUDE (в любом регистре) а затем возможное двоеточие с последующим именем файла, которое, возможно, заключено в апострофы, кавычки или угловые скобки . Если имя файла заключено в угловые скобки, предполагается, что файл лежит в одном из каталогов, указанных с помощью ключевого слова SYSINCLUDE. В противном случае AUTOMAKE смотрит в каталог исходных файлов, а если его там нет, то в каталог, указанный с помощью ключевого слова INCLUDE.

    * Если AUTOMAKE не может найти файл INCLUDE, он выдает сообщение об этом на экран и игнорирует отношение зависимости.

    * AUTOMAKE вызывается по сценарному файлу с именем am. Необходимость в модификации этого файла возникает редко, хотя сделать это очень просто. Для этого нужно проделать две (или три) операции:

    1. Выполнить AUTOMAKE. AUTOMAKE определяет, что нужно сделать для того, чтобы
    обновить ваш проект и написать сценарий для этого. Параметры, которые можно
    приписать после команды AUTOMAKE, таковы:
       TO= указывает имя выходного сценарного файла, который AUTOMAKE создает.
       FIG= определяет имя конфигурационного файла AUTOMAKE.
    2. Выполнить командный файл (automake.tmp), который создан программой AUTOMAKE.
    3. Удалить командный файл, который создала  AUTOMAKE. Этот шаг, конечно,
    необязателен.
    

<<< Оглавление Страницы: 5  6 >>>