2014-04-08 20 views
5

Quando si genera il database cscope del kernel Linux emettendo make cscope, ottengo il file di database con un elenco di file con il percorso relativo. Questo è un problema per me, perché più tardi, quando io attribuisco quel database del kernel esterno in editor di vim da qualunque directory ma kernel di posso facilmente cercare specifico simbolo MA posso file non aprire quel simbolo è contenuto in.kernel Linux makescile cscope target

ho scritto la prossima bash script di

#!/bin/bash 

SNAME="$0" 
SNAME=${SNAME##*/} 

function usage() 
{ 
    echo Generate Linux kernel cscope database 
    echo "Usage: $SNAME [PATH]" 
    echo -n "You must provide this script with an ABSOLUTE path of your " 
    echo "kernel's root directory" 
} 

if [[ -z "$1" ]]; then 
    usage 
    exit -1 
fi 

KDIR="$1" 

echo -n "Collecting a list of files... " 
if find "$KDIR" -path "${KDIR}/arch/*" ! -path "${KDIR}/arch/x86*" -prune -o \ 
     -path "${KDIR}/include/asm-*" \ 
     ! -path "${KDIR}/include/asm-generic*" \ 
     ! -path "${KDIR}/include/asm-x86*" -prune -o \ 
     -path "${KDIR}/tmp*" -prune -o \ 
     -path "${KDIR}/Documentation*" -prune -o \ 
     -path "${KDIR}/scripts*" -prune -o \ 
     -name "*.[chxsS]" -print > cscope.files; then 
    echo done 
else 
    echo failed 
fi 

echo -n "Building cscope database... " 
cscope -k -qb && echo done || echo failed 

che raccoglie tutti i file di cui ho bisogno (x86/x86_64 architettura) utilizzando assoluta percorso e poi con successo a costruire database di cscope manualmente. Ma penso che debba essere un modo più semplice per realizzare questo. Forse alcuni target di Makefile come make cscope_abs o make cscope_ext che non ho ancora trovato.

Qualche suggerimento?

+0

+1 non sapeva che ha un'opzione Cscope. –

+1

Una cosa che mi viene in mente è: guarda nel Makefile come viene chiamato cscope, se esiste una variabile puoi quindi specificare alcune opzioni per cscope nella riga di comando. – Chnossos

risposta

2

Dalla manpage cscope here:

-P percorso percorso Anteponi nomi di file relativi a un file di riferimento incrociato pre-costruito in modo da non dover cambiare la directory in cui il è stato creato un file di riferimento incrociato. Questa opzione è valida solo con l'opzione -d .

quindi credo che il seguente comando dalla directory kernel di livello superiore dovrebbe fare il trucco (mi dispiace nessuna macchina linux a portata di mano):

cscope -d -P `pwd` 

i miei 2 centesimi,

1
make cscope 

o per il tuo caso specifico -

ARCH=x86 make cscope 
3

In primo luogo, è più semplice t o creare un database cscope specifico per una particolare architettura come segue: In cartella principale del kernel Linux, eseguito

ARCH=x86 make cscope 

Questo crea un cscope con relativi percorsi. Ora si può chiedere vim per interpretare i percorsi relativi alla posizione del file cscope.out in uno dei due modi:

Way 1: Usa cscoperelative. Uscita di :help csre:

If 'cscoperelative' is set, then in absence of a prefix given to cscope 
(prefix is the argument of -P option of cscope), basename of cscope.out 
location (usually the project root directory) will be used as the prefix 
to construct an absolute path. The default is off. Note: This option is 
only effective when cscope (cscopeprg) is initialized without a prefix 
path (-P). Examples: > 
    :set csre 
    :set nocsre 

Way 2: (Dalla risposta Aaron Hs' in this questione) Quando si aggiunge il database cscope in vim, specificare il percorso di base.Esempio:

:cs add <base_location>/cscope.out <base_location>/ 

Dalla pagina di aiuto di vim per cscope aggiuntivo:

USAGE :cs add {file|dir} [pre-path] [flags] 

    [pre-path] is the pathname used with the -P command to cscope. 
0

È possibile utilizzare il seguente comando nella radice dell'albero del kernel per generare percorsi assoluti:

#> make O=. cscope