Цели/цели списка в GNU делают, которые содержат переменные в их определении

У меня есть довольно большой make-файл, который создает много целей на лету путем вычислений имен из переменных. (например, foo$ (VAR): $ (PREREQS)). Есть ли какой-либо способ, которым гну делают, может быть убежден выложить список целей после того, как это развернуло эти переменные?

Я хотел бы смочь получить цели для aribitrary make-файла. Я пытаюсь записать функцию завершения для своей оболочки.

99
задан Ciro Santilli 新疆改造中心法轮功六四事件 26 April 2015 в 07:10
поделиться

1 ответ

Конечно, но когда вы хотите, чтобы он их выплюнул?

Чтобы сообщать имя цели при выполнении правила, поместите в правило строку:

foo$(VAR): $(PREREQS)
    @echo now making the foo target: $@
    do_other_stuff...

Чтобы выплюнуть их все сразу, вы можете сделать отдельную цель PHONY:

.PHONY: show_vars
show_vars:
    @echo foo$(VAR)
    @echo bar$(PARAM) blah$(FLAG)
    # and so on

И это можно сделать необходимым условием цели по умолчанию:

all: show_vars
    ...

EDIT:
Вы хотите способ показать все возможные цели произвольного makefile, что, я полагаю, означает не навязчиво. Ну...

Чтобы сделать это точно, и иметь возможность работать со сложными make-файлами, например, включающими правила, построенные с помощью eval операторов, вам придется написать что-то близкое к эмулятору Make. Непрактично.

Чтобы увидеть цели простых правил, можно написать makefile, который будет действовать как сканер makefile, работая с произвольным makefile:

  1. Получите все имена целей из makefile с помощью sed.
  2. `include` makefile, чтобы использовать его для расширения переменных.
  3. Используйте `show_%: ; echo $$*` для вывода всех целей.

Это была бы впечатляющая работа. Вы уверены, что цель стоит затраченных усилий?

-1
ответ дан 24 November 2019 в 05:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: