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を使用する有効な方法を知っていますか?
読んでくれてありがとう。
レナード