C++ 如何使用shell magic使用GNU etags创建递归etags?

C++ 如何使用shell magic使用GNU etags创建递归etags?,c++,bash,gnu,etag,exuberant-ctags,C++,Bash,Gnu,Etag,Exuberant Ctags,标准GNUetags不支持exuberantctags-R所做的目录递归遍历。如果我只能访问GNU ETAG,如何使用Bash shell魔术获得ETAGS,为当前的所有目录中的C++文件 > CPP < /COD>和 *.h 文件以及当前目录下的所有目录递归地创建当前目录中的标签表,该表具有正确的路径名,用于 Emacs < /C> >以解析标签表。条目。使用查找。如果需要的话,可以找人。通常是解决常见问题或最佳实践的好来源。对于您的特定问题,Windows和Unixen都有解决方案: 基本

标准GNU
etags
不支持exuberant
ctags-R
所做的目录递归遍历。如果我只能访问GNU ETAG,如何使用Bash shell魔术获得ETAGS,为当前的所有目录中的C++文件<代码> > CPP < /COD>和<代码> *.h <代码>文件以及当前目录下的所有目录递归地创建当前目录中的标签表,该表具有正确的路径名,用于<代码> Emacs < /C> >以解析标签表。条目。

使用查找。如果需要的话,可以找人。

通常是解决常见问题或最佳实践的好来源。对于您的特定问题,Windows和Unixen都有解决方案:

基本上,您可以运行一个命令来查找所有
.cpp
和所有
.h
文件(如果您使用不同的文件结尾,例如
.C
,请更改文件选择器),并将结果导入ETag。由于Windows似乎没有xargs,因此您需要一个更新版本的etags,它可以从stdin读取数据(请注意行末尾的破折号,该破折号表示stdin)。当然,如果使用最新版本的etag,也可以使用dash参数而不是xargs

窗口

cd c:\source-root
dir /b /s *.cpp *.h *.hpp | etags --your_options -
cd /path/to/source-root
find . -name "*.cpp" -print -or -name "*.h" -print | xargs etags --append
Unix

cd c:\source-root
dir /b /s *.cpp *.h *.hpp | etags --your_options -
cd /path/to/source-root
find . -name "*.cpp" -print -or -name "*.h" -print | xargs etags --append

此命令使用.c、.cpp、.cpp、.hpp、.hpp.h文件的默认名称“TAGS”递归创建etags文件

find . -regex ".*\.[cChH]\(pp\)?" -print | etags -

这里发布的大多数答案都将
find
输出传输到
xargs
。如果目录树中的文件名中有空格,则会中断

如果文件名(对于
.c
.h
文件)中有空格,则更通用的解决方案可以是:

find . -name "*.[cChH]" -exec etags --append {} \;

我敢打赌,男人沙格斯也是。或者只是安装exuberant并使用它的etags…你怎么会“只能访问GNU etags”?丰富的CTAG可免费用于许多平台。你不能安装它吗?雇主不希望安装未经授权的软件,如果我能使用提供的
etags
解决这个问题,就不会反对。使用
xargs
将文件数量限制在命令行参数的最大数量,大型项目最好使用
etags-
版本。