2012-08-11 22 views
6

Pracuję nad projektem, który wymaga zrozumienia kodu źródłowego kompilatora llvm. Aby przeglądać kod źródłowy LLVM, starałem się używać Cscope z następującego polecenia w katalogu głównego źródła:Jak korzystać z cscope dla projektu, który ma pliki .c, .cpp i .h?

Cscope -R *

Ale to nie działa. Ponieważ istnieją głównie pliki .cpp i .h, ale niektóre pliki .c również tam są. Więc nie mam pojęcia, jak zrobić cscope? Czy ktoś może Ci pomóc?

Odpowiedz

9

można użyć następujących poleceń, aby wykonać żądane zadanie z katalogu głównego drzewa źródłowego llvm:

touch tags.lst 
find | grep "\.c$" >> tags.lst 
find | grep "\.cpp$" >> tags.lst 
find | grep "\.h$" >> tags.lst 
cscope -i tags.lst 

To spowodowałoby Cscope .out plik używany z cscope do przeglądania kodu. Mam nadzieję, że to pomoże!

+9

Doing 3 lots of "find | grep' to trochę marnotrawstwo. Możesz doskonale używać 'egrep' lub' grep -E' z pojedynczym 'find':' find. -type f -print | grep -E '\. (c (pp)? | h) $'> cscope.files'. –

+2

Tak, masz rację. Właściwie to napisałem, aby rzeczy były łatwe do zrozumienia. Ale w każdym razie nie jest to mądre. – leonidus

+5

'cscope -R'' lub' cscope $ (find -iregex '. + \. [Chp] +') ' – Haix64

2

Aby objąć naszą dużą bazę kodu, mam skrypt, który wygląda trochę tak, aby zbudować indeksy cscope. Powodem zmiany na/jest to, że mam pełne ścieżki plików do plików źródłowych, co sprawia, że ​​rzeczy działają nieco płynniej.

cd/
find -L /home/adrianc/code -name "*.c" -o -name "*.cc" -o -name "*.h" > /home/adrianc/code/cscope.files 
cd /home/adrianc/code 
/usr/local/bin/cscope -b -icscope.files -q -u 

także może być warto sprawdzić http://cscope.sourceforge.net/cscope_vim_tutorial.html

+1

Dziękuję za odpowiedź! Po prostu "pracowałem" find -L -name "* .cc" -o -name "* .h"> cscope.files ". – pablofiumara

6

Wygodny sposób wymienić wszystkich C++ pliki w projekcie jest użycie narzędzia ack: polecenie grep-jak zoptymalizowany dla kodu źródłowego szukasz (w niektórych dystrybucjach, na przykład Ubuntu, narzędzie nazywa ack-grep). Można uruchomić go tak:

ack -f --cpp > cscope.files 

Wyjście są ścieżki do wszystkich .cpp, .h, .cc.hpp plików

+1

Tylko dla ciebie leniwych użytkowników takich jak ja: 'sudo apt-get install ack' pobiera mnie: 'ack - Konwerter kodu kanji ", a nie to samo narzędzie. Czytanie strony http://beyondgrep.com/install/ przez 20 sekund i uważam, że jest to "sudo apt-get install ack-grep" – qneill

0

Tylko dlatego, że jest to wciąż najbardziej popularny wpis. Stdin thingy mogły zostać dodane w międzyczasie, czy nie, ale to sprawia, że ​​niby elegancki:

find -regex '.*\.\(c\|h\|cpp\|cxx\|hh\|hpp\|hxx\)$' | cscope -i- -b -q 
0

Mam następujących w moim .bashrc, który stanie się łatwiejsze. Uruchom cscope_build(), aby wygenerować bazę danych i cscope, aby uruchomić narzędzie cscope.

# Use vim to edit files 
export CSCOPE_EDITOR=`which vim` 

# Generate cscope database 
function cscope_build() { 
    # Generate a list of all source files starting from the current directory 
    # The -o means logical or 
    find . -name "*.c" -o -name "*.cc" -o -name "*.cpp" -o -name "*.h" -o -name "*.hh" -o -name "*.hpp" > cscope.files 
    # -q build fast but larger database 
    # -R search symbols recursively 
    # -b build the database only, don't fire cscope 
    # -i file that contains list of file paths to be processed 
    # This will generate a few cscope.* files 
    cscope -q -R -b -i cscope.files 
    # Temporary files, remove them 
    # rm -f cscope.files cscope.in.out cscope.po.out 
    echo "The cscope database is generated" 
} 
# -d don't build database, use kscope_generate explicitly 
alias cscope="cscope -d"