2016-07-06 4 views
1

Я вижу ниже опций команды для GCC в Makefile:

... -MMD -MP -MF "$(@:%.o=%.d)" -MT "$(@:%.o=%.d)" -o "[email protected]" "$<" 

Как интерпретировать это?

Я просмотрел файл makefile, но пока не повезло.

(Это не только о Automatic Variables)

+0

Возможный дубликат [Что Makefile, символы $ @ и $ <означает?] (Http://stackoverflow.com/questions/3220277/what-do-the-makefile-symbols-and-mean) – Tim

+1

Речь идет не только об автоматических переменных. – smwikipedia

ответ

4

$(:=) выполняет string replacement.
[email protected]the name of the file being generated (цель).
Таким образом, $(@:%.o=%.d) - это имя файла, с расширением .o изменено на .d.

Эта командная строка генерирует один файл зависимостей .d для каждого файла .o.

+0

Я никогда не ожидал, что '()' может чередовать с '$ @'. – smwikipedia

+1

@smwikipedia Make не имеет самого симпатичного синтаксиса, я дам вам следующее: p – Quentin

0

(Спасибо @ ключ Квентина я только что нашел его.!)

Это называется Substitution Reference

Некоторые цитаты:

Ссылка замещения подставляется значение переменной с изменениями которые вы указываете. Он имеет форму «$(var:a=b)» (или '${var:a=b}'), и его смысл состоит в том, чтобы принять значение переменной var, заменить каждый a в конце слова на b в этом значении и заменить полученную строку.

Когда мы говорим «в конце слова», мы подразумеваем, что a должно появиться либо с последующим пробелом, либо в конце значения для замены ; другие вхождения a в значение не изменяются. Для Например:

foo := a.o b.o c.o

bar := $(foo:.o=.c)

наборы «bar» до «a.c b.c c.c». См. Setting Variables.

Ссылка на замещение на самом деле является аббревиатурой от использования функции расширения patsubst (см. Functions for String Substitution and Analysis). Мы предоставляем ссылки на замещения, а также patsubst для совместимость с другими реализациями make.

Таким образом, полная интерпретация следующей команды:

... -MMD -MP -MF "$(@:%.o=%.d)" -MT "$(@:%.o=%.d)" -o "[email protected]" "$<" 

является:

Использование GCC для компиляции 1-го предварительных условий файла ($<) и генерировать выходной файл с именем после того, как имя текущего правила (%@).И путем способом, сгенерируйте файл с именем *.d, содержащий правило , чтобы описать зависимость текущего целевого значения правила. И измените имя правило цель в сгенерирована *.d makefile от *.o до *.d.

Смежные вопросы