Файлы Makefile с несколькими целями: льготный режим MAKECMDGOALS

#makefile #gnu-make

#makefile #gnu-make

Вопрос:

Я экспериментировал с Make-файлами, в частности с правилами Makefile, содержащими более одной цели

Рассмотрим этот Makefile:

 x := $(MAKECMDGOALS)
y := Whatever

dummy $(y) $(x) :
    @echo target: $@
 

Здесь простой make вызов выводит target: dummy , но make xyz выводит target: xyz . Почему это происходит? Есть ли что-то особенное в переменной MAKECMDGOALS? Почему переменная x обрабатывается «с большей важностью» по сравнению с y?

Ответ №1:

Почему это должно иметь какое-либо отношение к? MAKECMDGOALS Это просто нормальное поведение.

Запустите этот makefile, который вообще не использует MAKECMDGOALS переменные or, и вы увидите тот же результат:

 dummy Whatever xyz:
        @echo target: $@
 

Это потому, что целью по умолчанию для make, если вы не задаете никаких целей в командной строке, является первая, которая в данном случае является dummy . Если вы задаете цель (например, make xyz ), то это цель, которая будет создана.

Комментарии:

1. Ах .. это имеет смысл. Я слишком много думал об этой проблеме