Алексей Махоткин

домашняя страница

Autoconf

Go to the first, previous, next, last section, table of contents.


Заключение в кавычки

@anchor{Quoting}

Макросы, которые вызываются другими макросами оцениваются программой m4 несколько раз; каждая оценка может потребовать другого уровня кавычек для предотвращения нежелательных расширений макросов или встроенных возможностей m4, таких как `define’ и `$1’. Кавычки также требуются вокруг аргументов макросов, которые содержат запятые, поскольку запятые разделяют аргументы макроса. Также хорошей привычкой является заключение в кавычки аргументов, которые содержат символы новой строки или вызовы других макросов.

Autoconf изменяет символ-кавычку программы m4 со значений по умолчанию “’ и `” на `[’ и `]’, поскольку многие из макросов используют не сочетаемые “’ и `”. Однако в нескольких местах макросам необходимо использовано символов-скобок (обычно в тексте программ на языке C или в регулярных выражениях). В этих местах макросы используют встроенную команду m4 changequote для временного изменения символа-кавычек на `<<’ и `>>’. (Иногда, если им нет нужды заключать в кавычки что-либо, то они запрещают заключение в кавычки установкой символов-кавычек равных пустым символам). Вот пример использования:

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)

Когда вы создает скрипт configure, используя свеже написанные макросы, то тщательно проверьте их на то, нужно ли добавить дополнительные символы-кавычки в эти макросы. Если одно или несколько слов исчезнут в выводе m4, то вам необходимо добавить дополнительные символы-кавычки. Если вы сомневаетесь, то просто добавьте кавычки.

Однако также возможно поместить слишком много уровней кавычек. Если это случается, то полученный скрипт configure будет содержать не-расширенный макрос. Программа autoconf выполняет проверку этой проблемы, выполняя команду `grep AC_ configure’.


Go to the first, previous, next, last section, table of contents.

Comments