go to the first, previous, next, last section, table of contents.
создание макросов@anchor{writing macros} когда вы пишете тест свойства, который будет применяться в более чем одном пакете программного обеспечения, то лучше всего оформить его в виде нового макроса. в этом разделе приводятся некоторые инструкции и указания по написанию макросов autoconf. определение макросов@anchor{macro definitions}
макросы autoconf определяются с помощью макроса определение макроса autoconf выглядит примерно следующим образом: ac_defun(macro-name, [macro-body]) квадратные скобки не показывают необязательный параметр: они должны присутствовать в определении макроса для избежания проблем расширения макроса (see section заключение в кавычки). вы можете ссылаться на передаваемые макросу параметры с помощью переменных `$1', `$2' и т.п.
для ввода комментариев в
see section `how to define new macros' in gnu m4, для
более полной информации о написании макросов имена макросов@anchor{macro names} все макросы autoconf названы именами, состоящими из букв заглавных букв и начинающихся с префикса `ac_', для того, чтобы избежать конфликтов с другим текстом. все переменные командного процессора, которые используются для внутренних целей в этих макросах, как правило называются именами из прописных букв и начинаются с `ac_'. чтобы обеспечить, что ваши макросы не конфликтовали с существующими или будущими макросами autoconf, вы должны использовать собственный префикс для ваших макросов и переменных командного процессора. в качестве возможных значений вы можете использовать ваши инициалы, или сокращенное название вашей организации или пакета программ. большинство имен макросов autoconf следуют соглашению о структуре имени, которое показывает какой тип свойства проверяемого данным макросом. имена макросов состоит из нескольких слов, который разделены символами подчеркивания, продвигаясь от общих слов к более специфическим. имена соответствующих переменных кэша используют то же соглашение по именованию (see section имена переменных кэша, для получения дополнительной информации о них). первое слово имени после префикса `ac_' обычно сообщает категорию тестируемого свойства. вот какие категории используются autoconf для специфических макросов, один из типов которых вы вероятно захотите написать. они также используются для именования переменных кэша, только используя прописные буквы. используйте перечисленные категории при написании ваших макросов; если нужной категории нет, то вы можете вводит собственные.
после категории следует имя тестируемого свойства. любые дополнительные
слова в имени макроса указывают на специфические аспекты тестируемого
свойства. например,
макрос, который является внутренней подпрограммой другого макроса должен
иметь имя, которое начинается с имени этого макроса, за которым следует
одно или несколько слов, описывающих что делает этот макрос. например,
макрос заключение в кавычки@anchor{quoting}
макросы, которые вызываются другими макросами оцениваются программой
autoconf изменяет символ-кавычку программы ac_try_link( changequote(<<, >>)dnl <<#include <time.h> #ifndef tzname /* for sgi. */ extern char *tzname[]; /* rs6000 and others reject char **tzname. */ #endif>>, changequote([, ])dnl [atoi(*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
когда вы создает скрипт
однако также возможно поместить слишком много уровней кавычек. если это
случается, то полученный скрипт зависимости между макросами@anchor{dependencies between macros} некоторые макросы autoconf зависят от других макросов, которые должны быть вызваны первыми для того, чтобы работа производилась правильно. autoconf предоставляет способ для того, чтобы проверить, что некоторые макросы были вызваны, и способ предоставления пользователю информацию о макросах, которые вызываются в порядке, которые может привести к неправильному выполнению. требуемые макросы@anchor{prerequisite macros}
макрос, которое вы можете написать, может нуждаться в значениях, которые
перед этим были вычислены другими макросами. например,
вместо того, чтобы заставлять пользователя макросов помнить все
зависимости между макросами, вы можете использовать макрос
альтернативой этому использованию
предлагаемый порядок@anchor{suggested ordering} некоторые макросы должны быть вызваны до других макросов, если оба макроса вызываются, но не требует, чтобы другие макросы были вызваны. например, макрос, который изменяет поведение компилятора c должен быть вызван до любого из макросов, которые запускают компилятор c. многие из этих зависимостей упоминаются в документации.
autoconf предоставляет макрос ac_before([$0], [ac_prog_cpp])dnl
это вызывает выдачу предупреждения пользователю, если вызов
устаревшие макросы@anchor{obsolete macros}
технология настройки и переносимости развивалась многие годы. часто
разрабатывались лучшие решения отдельных проблем, или
систематизировались специальные подходы. этот процесс происходил во
многих частях autoconf. результатом этого является то, что некоторые
макросы в настоящее время считаются устаревшими; они до сих пор
работают, но не считаются лучшим способом решения. autoconf
предоставляет макрос ac_obsolete([$0], [; use ac_check_headers(unistd.h) instead])dnl
go to the first, previous, next, last section, table of contents. |