Переносимый эквивалент GNU make шаблонных правил в стиле% - PullRequest
5 голосов
/ 20 апреля 2009

Я следую инструкциям на странице Использование проверки с помощью Autotools в попытке встроить поддержку модульного тестирования в (в настоящее время) небольшом C-проекте. Хотя я использую Cgreen вместо Проверьте .

У меня проблема с шагом 9, из-за которого automake выдает предупреждение об использовании шаблонных правил в стиле `%, являющихся расширением GNU make.

Конкретное правило make:

check_%.$(OBJEXT) : $(srcdir)/%.c
    $(COMPILE) -DCHECKING -c -o $@ $^

Мне интересно, существует ли эквивалентный способ указания этого правила, которое не зависит от расширений gnu make.

Ответы [ 2 ]

7 голосов
/ 20 апреля 2009

Переносимые правила make могут использовать только разные суффиксы, префиксы должны быть одинаковыми.

.c.o:
        $(COMPILE) -DCHECKING -c -o $@ $<

Однако суффикс не обязательно начинается с точки. (В этом случае вы должны сообщить Automake, какие у вас суффиксы, потому что он не может угадать.) Так, например, вы можете получить что-то следующее, если переименуете check_showdns.o в showdns_check.o:

SUFFIXES = _check.o 
check_libapdns_LDADD        = @CHECK_LIBS@ showdns_check.o
.c_check.o:
        $(COMPILE) -DCHECKING -c -o $@ $<
0 голосов
/ 20 апреля 2009

Я бы предпочел отключить предупреждение или просто проигнорировать его. GNU make существует для всех соответствующих Unix-подобных платформ; нет практической причины тратить время на поддержание переносимости make-файлов. GNU make также значительно превосходит большинство других диалектов make.

...