Еще один дополнительный ответ на вопрос выше.
протестировано на MacOSX с использованием только cat и awk на терминале
cat Makefile | awk '!/SHELL/ && /^[A-z]/ {print $1}' | awk '{print substr($0, 1, length($0)-1)}'
выведет файл make, как показано ниже:
target1
target2
target3
в Makefile, это должен быть тот же оператор, убедитесь, что вы экранируете переменные, используя переменную $$, а не переменную $.
Объяснение
кошка - выплевывает содержимое
| - труба анализирует вывод на следующий awk
awk - выполняет регулярное выражение, исключая "shell" и принимая только строки "A-z", а затем печатает первый столбец $ 1
awk - еще раз удаляет последний символ ":" из списка
это грубый вывод, и вы можете делать более интересные вещи с помощью всего лишь AWK. Старайтесь избегать sed, поскольку он не так согласован в вариантах BSD, то есть некоторые работают на * nix, но не работают на BSD, таких как MacOSX.
Подробнее
Вы можете добавить это (с изменениями) в файл для make , в папку завершения bash по умолчанию /usr/local/etc/bash-completion.d /
это означает, что когда вы "делаете вкладка вкладка " .. она выполнит цели на основе одного скрипта лайнера.