bash завершение цели makefile - PullRequest
37 голосов
/ 15 ноября 2010

Предположим, у меня есть простой make-файл вроде:

hello:
   echo "hello world"

bye:
   echo "bye bye"

Тогда в Bash я хочу что-то вроде:

make h

, чтобы он мог завершить до

Привет

Я нашел простой способ создания пустых файлов hello и bye, но я ищу что-то более изощренное .

Ответы [ 5 ]

38 голосов
/ 17 июля 2016

Добавьте это в ваш ~ / .bash_profile файл или ~ / .bashrc файл

complete -W "\`grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' Makefile | sed 's/[^a-zA-Z0-9_.-]*$//'\`" make

Это ищет цель в вашем Makefile под названием ' Makefile ' (обратите внимание на заглавную M), используя grep, и передает ее команде complete в bash, которая используется для указать, как аргументы завершены. Флаг -W означает, что ввод команды 'complete' будет списком слов, который выполняется путем передачи результатов grep через sed , который упорядочивает его в желаемый список слов формат.

Предостережения и ошибки:

  1. Ваш make-файл называется «GNUMakefile» или «makefile», или что-то еще, кроме «Makefile». Если вы часто сталкиваетесь с такими заголовками, просто добавьте еще одну строку с тем же форматом, что и выше, но с желаемым названием make-файла вместо «Makefile» в файле ~ / .bashrc или ~ / .bash_profile.

  2. Забыть источник файла ~ / .bash_profile или ~ / .bashrc после внесения изменений. Я добавляю эту, казалось бы, тривиальную деталь, поскольку непосвященным она незнакома. Чтобы изменения в ваших bash-файлах вступили в силу, source их используйте команду

    source ~/.bashrc
    

    или

    source ~/.bash_profile
    

PS. Теперь у вас также есть добавленная возможность отображать возможные создания целей, дважды нажав [Tab], как при завершении bash. Просто убедитесь, что вы добавили пробел после команды make, прежде чем дважды вводить [Tab].

10 голосов
/ 15 ноября 2010

Может ли это быть тем, что вы ищете?

http://freshmeat.net/projects/bashcompletion/

make [Tab] завершится на всех целях в Makefile.Этот проект был задуман для создания программируемых подпрограмм завершения для наиболее распространенных команд Linux / UNIX, что уменьшает количество набираемых sysadmins и программистов ежедневно.

2 голосов
/ 15 ноября 2010

По умолчанию это, по крайней мере, Debian Lenny:

$ grep Makefile /etc/bash_completion
    # make reads `GNUmakefile', then `makefile', then `Makefile'
    elif [ -f ${makef_dir}/Makefile ]; then
        makef=${makef_dir}/Makefile
    # before we scan for targets, see if a Makefile name was
    # deal with included Makefiles

В заголовке этого файла указано:

#   The latest version of this software can be obtained here:
#
#   http://bash-completion.alioth.debian.org/
#
#   RELEASE: 20080617.5
1 голос
/ 08 января 2019

Существует полезный пакет под названием bash-complete , доступный для большинства каждой ОС. Включает завершение Makefile.

(Если вы используете macOS и Homebrew , вы можете получить это через brew install bash-completion.)

0 голосов
/ 06 августа 2014

В Ubuntu 10.04 используйте следующий файл:

. /etc/bash_completion

или раскомментируйте его в

/etc/bash.bashrc
...