Как использовать 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

Другие вопросы по тегам