Подтвердить что ты не робот

Bash завершение цели makefile

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

hello:
   echo "hello world"

bye:
   echo "bye bye"

Затем в bash мне нужно что-то вроде:

сделать h < вкладкa >

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

приветствовать

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

  1. Ваш make файл называется "GNUMakefile" или что-то еще, кроме "Makefile" или "makefile". Если вы часто сталкиваетесь с такими заголовками, подумайте об изменении соответствующего регулярного выражения ?akefile.

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

    source ~/.bashrc
    

    или

    source ~/.bash_profile
    

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

Ответ 3

Похоже, что это по умолчанию, по крайней мере, 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

Ответ 4

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

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

Ответ 5

В Ubuntu 10.04 введите следующий файл:

. /etc/bash_completion

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

/etc/bash.bashrc