2014-04-08 7 views
5

जब मैं make cscope जारी करके लिनक्स कर्नेल सीएससीओपी डेटाबेस उत्पन्न करता हूं तो मुझे संबंधित पथ वाली फ़ाइलों की सूची के साथ डेटाबेस फ़ाइल मिलती है। यह मेरे लिए एक समस्या है क्योंकि बाद में जब मैं बाहरी कर्नेल के डेटाबेस को जो भी निर्देशिका से विम संपादक में संलग्न करता हूं लेकिन कर्नेल के मैं आसानी से विशिष्ट प्रतीक पर खोज सकता हूं लेकिन मैं उस फ़ाइल को नहीं खोल सकता हूं जिसमें प्रतीक शामिल है।लिनक्स कर्नेल मेकफ़ाइल सीएससीओपी लक्ष्य

मैं अगले बैश स्क्रिप्ट

#!/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 

कि पूर्ण पथ का उपयोग कर सभी फाइलों को मैं की जरूरत है (x86/x86_64 आर्किटेक्चर) एकत्र करता है और फिर मैं सफलतापूर्वक मैन्युअल cscope डेटाबेस के निर्माण में लिखा है। लेकिन मुझे लगता है कि इसे पूरा करने के लिए यह कुछ आसान तरीका होना चाहिए। हो सकता है कि कुछ मेकफ़ाइल का लक्ष्य make cscope_abs या make cscope_ext जैसा कि मुझे अभी तक नहीं मिला है।

कोई सुझाव?

+0

+1 पता नहीं था कि इसमें एक सीएससीओपी विकल्प है। –

+1

एक बात जो मेरे दिमाग में आती है वह है: मेकफ़ाइल को कैसे देखें, यदि कोई चर मौजूद है तो आप कमांड लाइन में cscope के लिए कुछ विकल्प निर्दिष्ट कर सकते हैं। – Chnossos

उत्तर

2

cscope मैनपेज here से:

-पी पथ प्रारंभ में लगा पहले से बने परस्पर-संदर्भ फ़ाइल में रिश्तेदार फ़ाइल नाम के लिए पथ ताकि आप निर्देशिका है जहाँ को बदलने की जरूरत नहीं है क्रॉस-रेफरेंस फाइल बनाई गई थी। यह विकल्प केवल -d विकल्प के साथ मान्य है।

तो मैं उच्च-स्तरीय गिरी निर्देशिका से निम्न आदेश चाल (खेद नहीं linux मशीन काम) करना चाहिए लगता है:

cscope -d -P `pwd` 

मेरी 2 सेंट,

1
make cscope 

या आपके विशिष्ट मामले के लिए -

ARCH=x86 make cscope 
3

सबसे पहले, यह आसान है , लिनक्स कर्नेल के शीर्ष फ़ोल्डर में चलाने

ARCH=x86 make cscope 

यह रिश्तेदार रास्तों के साथ एक cscope बनाता है: ओ एक cscope डेटाबेस एक विशेष वास्तुकला के रूप में इस प्रकार के लिए विशिष्ट बना सकते हैं।

मार्ग 1: उपयोग cscoperelative अब आप रास्तों दो तरीकों में से एक में cscope.out फ़ाइल का स्थान के सापेक्ष व्याख्या करने के लिए vim पूछ सकते हैं। :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 

रास्ता 2: जब vim में cscope डेटाबेस जोड़ने (this प्रश्न में हारून एच 'जवाब से), आधार स्थान निर्दिष्ट करें।उदाहरण:

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

vim की मदद पृष्ठ से cscope जोड़ने के लिए:

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

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

आप गिरी पेड़ की जड़ में निम्न आदेश का उपयोग कर सकता है निरपेक्ष पथ उत्पन्न करने के लिए:

#> make O=. cscope 
संबंधित मुद्दे