Почему make-файлы иногда имеют значение true <filename>как часть сценария сборки? - PullRequest
4 голосов
/ 09 марта 2011

Например:

# Some stuff

all: some dependencies
    @$(CC) -o foo.o foo.c
    @true foo.o
    @some other operation

Какой цели служит строка 'true foo.o'?

1 Ответ

6 голосов
/ 09 марта 2011

Обычно это выходные данные генератора Makefile, такие как automake.true будет заменен фактической командой на платформах, которые в ней нуждаются.Наиболее распространенным случаем являются платформы, которые не поддерживают статические архивные индексы автоматически;код будет выглядеть примерно так:

foo.a: foo.o bar.o baz.o ...
        ar rv foo.a foo.o bar.o baz.o ...
        true foo.a

, но на некоторых платформах (без System V или GNU ar) вместо этого он будет

foo.a: foo.o bar.o baz.o ...
        ar rv foo.a foo.o bar.o baz.o ...
        ranlib foo.a

Причина, по которой его просто не удаляютв том, что в m4 и других макропроцессорах намного проще заменить текст в строке, чем в случае условного удаления строки.(Это можно сделать, но известно, что продвинутые m4 хакерские атаки вызывают безумие.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...