使用 noweb,我想从 noweb 输入文件 **.nw 生成文档文件(或源文件)
从手我会做这样的事情:
notangle my_program.nw > my_program.cpp
g++ -c my_program.o my_program.cpp
ln -o myapp ... my_program.o ...
现在我想问我是否可以使用 scons 来自动执行此操作。
想象一下,我的项目目录在 $MYPROJECT 上。这里我们有“$MYPROJECT/SConstruct”。现在我定义了一个 scons 工具“tangle.py”(从“noweb.py”简化)。这里我们有“$MYPROJECT/site_scons/site_tools/tangle.py”
import SCons.Builder
def cpp_emit (target,source, env):
# I dont know what to do here ... please help
return (target,source)
# Tangle to .cpp
__noweb_tangle_builder = SCons.Builder.Builder(
action='/usr/bin/notangle $SOURCES >$TARGET',
suffix='.cpp',
src_suffix='.nw',
emitter=cpp_emit)
# -----------------------
def generate(env):
env['BUILDERS']['tangle']= __noweb_tangle_builder
def exists(env):
return 1
此工具从 nw 文件生成 cpp 文件。
但是如果我做类似的事情
def cpp_emit (target,source, env):
new_source=target[0].name
new_target=new_source.rstrip(".cpp")+".o"
target.append(new_target)
source.append(new_source)
return (target, source)
我进入了一个依赖圈。SCons 将找到并中止并显示错误消息。
正在做 ...
def cpp_emit (target,source, env):
new_source=target[0].name
# someprogram.cpp -> someprogram.o
new_target=new_source.rstrip(".cpp")+".o"
# lets avoid dependency cycle
t = []
t.append(new_target)
source.append(new_source)
# oops, we dropped target test.cpp. It wont be generated.
return (t, source)
...该工具将停止从 nw 文件生成 cpp 文件。(Cpp 目标下降)
您知道使用 scons 进行读写编程的工作方式吗?
谢谢你的阅读。
伦纳德