Как использовать cscope для проекта, в котором есть файлы.c, .cpp и.h?
Я работаю над проектом, который требует понимания исходного кода компилятора llvm. Чтобы просмотреть исходный код llvm, я попытался использовать cscope со следующей командой в корневом каталоге источника:
cscope -R *
Но это не работает. Поскольку в основном это файлы.cpp и.h, но есть и некоторые файлы.c. Так что теперь я понятия не имею, как заставить работать cscope? Может кто-нибудь, пожалуйста, помогите?
5 ответов
Вы можете использовать следующие команды для выполнения требуемой задачи из корневого каталога дерева исходных текстов llvm:
touch tags.lst
find | grep "\.c$" >> tags.lst
find | grep "\.cpp$" >> tags.lst
find | grep "\.h$" >> tags.lst
cscope -i tags.lst
Это создаст файл cscope.out, который используется с cscope для просмотра кода. Надеюсь, поможет!
Удобный способ перечислить все C++
файлы в проекте должны использовать инструмент ack: grep-подобную команду, оптимизированную для поиска исходного кода (в некоторых дистрибутивах, например Ubuntu, инструмент называется ack-grep
). Вы можете запустить его так:
ack -f --cpp > cscope.files
Выходные данные являются путями ко всем .cpp
, .h
, .cc
.hpp
файлы
У меня есть следующие в моем.bashrc, которые делают вещи проще. Бежать cscope_build()
создать базу данных и cscope
запустить инструмент 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"
Просто потому, что это все еще самая популярная запись. Stdin вещь может быть добавлена в то же время или нет, но это делает его немного элегантным:
find -regex '.*\.\(c\|h\|cpp\|cxx\|hh\|hpp\|hxx\)$' | cscope -i- -b -q
Чтобы охватить нашу большую базу кода, у меня есть скрипт, который выглядит примерно так, чтобы построить индексы cscope. Причина, по которой я переключаюсь на /, заключается в том, что у меня есть полные пути к исходным файлам, что делает работу более гладкой.
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
Также стоит проверить http://cscope.sourceforge.net/cscope_vim_tutorial.html