2015-04-08 2 views
3

У меня есть исходный каталог с несколькими файлами. Некоторые из них являются символическими ссылками на другие файлы.cscope для файлов, которые являются символическими ссылками

Я создал файл cscope.files. Но когда я выполняю cscope. Он жалуется на файлы, которые являются символическими ссылками:

cscope: cannot find file /home/bla/source/file.cc 

Я думаю, что это не очень хорошо, но, возможно, правильный путь, чтобы изменить «найти» сценарий, чтобы просто написать назначения на линке вместо этого?

+0

Является ли этот файл символической ссылкой или целью символической ссылки? Существует ли цель символической ссылки? –

+0

Это символическая ссылка. а не цель. Цель существует. – user972014

ответ

3

В настоящее время я использую:

# Write only the files which are NOT symlinks 
find `pwd` \(\(-iname "*.c" -o -iname "*.cc" -o -iname "*.h" \) -and \(-not -type l \) \) -print > cscope.files 
# Add the target of the symlink for all files matching the right extension, and are symlinks 
find `pwd` \(\(-iname "*.c" -o -iname "*.cc" -o -iname "*.h" \) -and -type l \) -printf "%l\n" >> cscope.files 

Но это кажется ужасным решением. Тем не менее в поисках лучшего одной

2

Я думаю, вы можете использовать команду, чтобы найти все реальные пути в папке, в которой вы искали

find -L [your searched folder] -name [your searched pattern] -exec realpath {} \; >> cscope.files 

Например, если я хотел бы добавить развитое заголовка папки и Linux Kernel к cscope.files, я буду выполнять следующие команды:

find -L `pwd` -iname "*.c" -o -iname "*.h" > cscope.files 
find -L /usr/src/linux-headers-3.19.0-15-generic/ -iname '*.h' -exec realpath {} \; >> cscope.files 

Надеюсь, ответ может вам помочь.

1

Например, если вы хотите дать/в качестве пути для Cscope, и хотите Cscope искать файлы с расширением .c/.h/.x/.с/.S вы можете дать команду находки как:

find/-type f -name "*.[chxsS]" -print -exec readlink -f {} \;> cscope.files 

Сюда входят обычные файлы, в том числе цели символических ссылок.

Смежные вопросы