Tags 烤饼和CTAG

Tags 烤饼和CTAG,tags,scons,ctags,Tags,Scons,Ctags,当我做烤饼时,我试图让CTAG自动运行。我有一个可以从SConscript文件中运行ctag的。只要我在适当的目录中得到一个标记文件,这就可以工作。但是,由于构建器在根目录而不是子目录中运行,因此对于标记文件中包含的所有文件,我得到了错误的路径(即来自根目录,而不是子目录)。除了使用sed剥离标记文件中的路径外,任何人都可以就如何使SCON生成正确的路径提供建议 实际上,我希望在一个特定的目录(即SConscript所在的目录,可能作为选项传递?)中运行构建器,而不是从项目根目录运行。这是我最终

当我做烤饼时,我试图让CTAG自动运行。我有一个可以从SConscript文件中运行ctag的。只要我在适当的目录中得到一个
标记
文件,这就可以工作。但是,由于构建器在根目录而不是子目录中运行,因此对于
标记
文件中包含的所有文件,我得到了错误的路径(即来自根目录,而不是子目录)。除了使用
sed
剥离标记文件中的路径外,任何人都可以就如何使SCON生成正确的路径提供建议


实际上,我希望在一个特定的目录(即SConscript所在的目录,可能作为选项传递?)中运行构建器,而不是从项目根目录运行。

这是我最终使用的构建器代码。注意,ctags命令有一个
--tag relative=yes
选项

# -*- coding: utf-8 -*-
import SCons.Builder
import SCons.Action

def complain_ctags(target, source, env):
    print 'INFORMATION: ctags binary was not found (see above). Tags have not been built.'

def generate(env):
    env['CTAGS'] = find_ctags(env)
    if env['CTAGS'] != None:
        #env['CTAGSCOM'] = 'cd $TARGET.dir; ctags -R .'
        env['CTAGSCOM'] = '$CTAGS --tag-relative=yes -f $TARGET $SOURCES'
        env['BUILDERS']['ctags'] = SCons.Builder.Builder(action=env['CTAGSCOM'])
    else:
        env['BUILDERS']['ctags'] = SCons.Builder.Builder(action=env.Action(complain_ctags))

def find_ctags(env):
    b=env.WhereIs('ctags')
    if b == None:
        print 'Searching for ctags: not found. Tags will not be built'
    else:
        print 'Searching for ctags: ', b
    return b

def exists(env):
    if find_ctags(env) == None:
        return 0
    return 1
在我的
Sconscript
文件中,我现在可以执行以下操作:

Alias('tags', env.ctags(source=all_python_files, target='tags'))

标记
文件现在包含的标记路径相对于标记文件的位置,而不是来自scons根目录

你能提供一些关于路径问题的更多细节吗,也许还有一段SConscript。您可以使用#字符指定相对于项目根的路径。使用“#”从项目根创建路径(例如放置的SConstruct)。@Brady:代码与链接答案中的代码几乎相同,但将
epydoc
替换为
ctags
。是的,我知道,我应该写得更一般一些。糟糕的我。没有饼干。