Gli obiettivi di Makefile sono disponibili per il completamento su Linux ma, AFAICS, non su Mac OS (10.8.5).completamento automatico Makefile su Mac
È possibile ottenere il completamento lavorando con questo sistema operativo?
Gli obiettivi di Makefile sono disponibili per il completamento su Linux ma, AFAICS, non su Mac OS (10.8.5).completamento automatico Makefile su Mac
È possibile ottenere il completamento lavorando con questo sistema operativo?
Questo sembra per ottenere semplici completamenti bash per me su El Capitan:
# .bashrc
function _makefile_targets {
local curr_arg;
local targets;
# Find makefile targets available in the current directory
targets=''
if [[ -e "$(pwd)/Makefile" ]]; then
targets=$(\
grep -oE '^[a-zA-Z0-9_-]+:' Makefile \
| sed 's/://' \
| tr '\n' ' ' \
)
fi
# Filter targets based on user input to the bash completion
curr_arg=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=($(compgen -W "${targets[@]}" -- $curr_arg));
}
complete -F _makefile_targets make
Ecco come funziona:
completa -F [funzione nome] [nome del comando] - - questo generatore di bash registra un nuovo completamento per [nome comando] che viene generato dalla funzione bash [nome funzione]. Quindi, nel mio codice qui sopra, se si digita make [TAB][TAB]
nella shell, si attiverà la funzione _makefile_targets()
.
se [[-e "$ (pwd)/Makefile"]]; quindi - assicurati che ci sia un Makefile nella directory corrente, altrimenti non provare un completamento bash.
grep -oe '^ [a-zA-Z0-9 _-] +:' Makefile - filtrare ogni riga del Makefile utilizzando l'espressione regolare per un nome di destinazione come "test". -o
significa solo restituire la parte della linea che corrisponde. Ad esempio, dato un target Makefile come "test: build package", verrà restituito solo "test:"
| sed 's /: //' - prendendo i risultati grep, rimuovere i due punti dalla fine della riga
| tr '\ n' '' - Smoosh tutti gli obiettivi in una sola riga, separati da uno spazio
All'interno di una funzione di completamento di bash, complete
set di diverse variabili di ambiente per voi. COMP_WORDS
è una matrice dell'elenco di scelte di completamento bash disponibili in base a ciò che l'utente ha digitato. COMP_CWORD
è l'indice della parola attualmente selezionata.
Un altro compendio molto magico compgen
prenderà un elenco di stringhe separate e filtrarle utilizzando la parola attualmente selezionata. Non sono affatto chiaro come funzioni.
Quindi, la linea di fondo è che le ultime due righe nella funzione filtrano il nostro elenco di target makefile (memorizzati all'interno di $targets
) e li inseriscono in un array COMPREPLY
. Il completamento della bash legge e visualizza COMPREPLY
come scelte nella shell.
Ispirato da:
Suppongo che aggiungendo in '.bashrc' una riga simile con' makefile' invece di 'Makefile' sia sufficiente per prendere in considerazione makefile con il nome in minuscolo (anche se i nomi in maiuscolo sono una buona pratica). –
@ DenisBitouzé si! Ci sono un bel po 'di potenziali marche di makefile a seconda del tuo sistema operativo. – Rustavore
Hai bisogno di vedere se è possibile trovare (installare e/o abilitare) il completamento bash approprate sulla tua macchina. Non so se quelle navi con OS X o sono disponibili tramite brew o qualcosa del genere però. –
@EtanReisner Avrei dovuto menzionare tale completamento su Mac OS 10.8 per, ad es. 'Cd'. Quindi immagino che qualche completamento bash sia già disponibile sul computer. –