问问题
461 次
3 回答
1
您可以使用Command() 构建器,而不是创建自己的构建器。
例如,您可以按如下方式执行 epydoc:
# SCons will substitute $SOURCE and $TARGET accordingly
# add any extra cmd line args you need to the cmd string
cmd = 'epydoc $SOURCE $TARGET'
env.Command(target = yourTarget, source = yourSourceFile_s, action = cmd)
于 2012-08-03T08:18:51.977 回答
0
## Create epydoc!
import os.path
if os.path.isfile('/usr/bin/epydoc'):
sources = Split("__init__.py ook/ eek/ fubar/")
cmd = "epydoc -q --name 'Isotek Python Module collection' " + \
"--html --inheritance listed --graph all -o docs --css white " + \
"--parse-only --debug $SOURCES"
env.Command(target = Dir('docs'), source = sources, action = cmd)
else:
print "WARNING -- Cannot run epydoc so documentation will not be generated."
print "WARNING -- To install epydoc run 'sudo yum -y install epydoc'."
请注意,我在 Fedora 上运行,不需要担心在其他地方运行的代码,因此我可以假设路径以及如何安装 epydoc。欢迎进行更一般的编辑。
于 2012-08-03T10:25:05.593 回答
0
这是另一种方法,可能更适合大型项目。
首先,epydoc.py
在site_scons/site_tools
(或任何你有这些的地方)定义为:
# -*- coding: utf-8 -*-
import SCons.Builder
import SCons.Action
def complain_epydoc(target, source, env):
print 'INFORMATION: epydoc binary was not found (see above). Documentation has not been built.'
def generate(env):
env['EPYDOC'] = find_epydoc(env)
if env['EPYDOC'] != None:
opts = '--quiet --html --inheritance listed --graph all --css white --parse-only '
env['EPYDOCCOM'] = '$EPYDOC ' + opts + '-o $TARGET $SOURCES'
env['BUILDERS']['epydoc'] = SCons.Builder.Builder(action=env['EPYDOCCOM'])
else:
env['BUILDERS']['epydoc'] = SCons.Builder.Builder(action=env.Action(complain_epydoc))
def find_epydoc(env):
b=env.WhereIs('epydoc')
if b == None:
print 'Searching for epydoc: not found. Documentation will not be built'
else:
print 'Searching for epydoc: ', b
return b
def exists(env):
if find_epydoc(env) == None:
return 0
return 1
在主SConstruct
文件中,添加:
import epdoc
env.Tool("epydoc")
然后,在您的SConstruct
文件中SConscript
,您可以像这样构建文档:
Alias('epydoc', env.epydoc(source=python_code_files, target=Dir('docs')))
注意:您可以对 ctags 和 pylint 执行相同的操作,仅举几例。
于 2012-08-03T12:58:45.127 回答