這是我最終使用的構建器代碼。請注意,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
文件(S),我現在可以這樣做:
Alias('tags', env.ctags(source=all_python_files, target='tags'))
的tags
文件現在包含有相對路徑標籤標籤文件的位置,而不是從scons的根目錄。
你可以提供一些有關路徑問題的細節,也可能是SConscript的一個片段。您可以使用#字符指定相對於項目根目錄的路徑。 – Brady 2012-08-03 16:51:24
使用'#'製作項目根目錄的路徑(例如放置SConstruct)。 – Torsten 2012-08-03 17:44:16
@Brady:代碼與鏈接答案中的代碼非常相似,但是'epydoc'替換爲'ctags'。是的,我知道,我應該把它寫得更通用。壞我。沒有餅乾。 – Sardathrion 2012-08-04 10:48:14