2012-02-25 3 views
1

私はmakeで魔法のシンボルを調べるのにうんざりして、wafを試してみることに決めました。カスタムコンパイラ用のwafファイルを作成するにはどうすればよいですか?

私は電子ブックを作るために口径を使用しようとしていると私は、ファイルを取り込んでのWScriptを作成したいのですが、そのファイルが含まれるいくつかの引数を指定してプログラムを実行し、出力を生成します。 Wafは、入力ファイルが出力よりも新しい場合にのみ構築する必要があります。

はメイクでは、私はこのようなメイクファイルを記述します:

%は出力ファイル名(basename.epub)のためのファイルのベース名と$記号のための魔法のシ​​ンボルである
%.epub: %.recipe 
    ebook-convert $ .epub --test -vv --debug-pipeline debug 

私はmake soverflow.epubを呼び出すことができ、それがsoverflow.recipe上の電子ブックコンバートを実行します。 .recipeが最後のビルドから変更されていなければ、何もしません。私はWAFに似た何かを行うことができますどのように

(なぜWAF?それは私が既に知っている本当の言語を使用しているので。これはsconsの中で本当に使いやすいであれば、それはあまりにも良い答えです。)

答えて

3

私は基本のWScriptファイルを作成する方法を考え出したが、私は、コマンドラインで指定されたターゲットをビルドする方法を知りません。


Wafのブックは、Task generatorsのセクションがあります。

from waflib import TaskGen 
TaskGen.declare_chain(
     rule   = 'ebook-convert ${SRC} .epub --test -vv --debug-pipeline debug', 
     ext_in  = '.recipe', 
     ext_out  = '.epub' 
) 

top = '.' 
out = 'build' 

def configure(conf): 
     pass 

def build(bld): 
    bld(source='soverflow.recipe') 

をそれも自動的にEPUBを取り除く洗浄ステップを提供します:Name and extension-based file processingセクションでは、私は適応LUAのための例を示します。

-2

私は少しのためにWAFをあきらめたといsconsで行うのはかなり簡単です。ドキュメントにはWriting Your Own Buildersに関するセクションがあります。

# Setup the custom builder 
def add_book_builder(env): 
    rule = 'ebook-convert $SOURCE .epub --test -vv --debug-pipeline debug' 
    bld = Builder(action = rule, 
        suffix = '.epub', 
        src_suffix = '.recipe') 
    env.Append(BUILDERS = {'Book' : bld}) 

env = Environment() 
add_book_builder(env) 

# Define the epubs that can be built 
for target in Glob('*.recipe'): 
    env.Book(target) 

実行中のscons soverflow.epubは、epubを構築します。引数がないときに最後にDefault(env.Book('soverflow.recipe'))を追加してビルドすることができます。

WAFとは異なり、それはきれいなステップを提供していません。代わりに、scons -cできれいにすることができます。

関連する問題