5

大規模なプロジェクトを使用から使用に移行しようとしmakeていwafます。プロセスをある程度自動化するのに役立つツールはありますか?

4

1 に答える 1

4

いいえ、ありませんが、移行はそれほど複雑ではありません。

これまでにwafを使用したことがない場合は、demos/フォルダー(c典型的なもの)の例を見て、wafブックを要約してください。

次に、makeからwafまで:

  • 関数によって具体化される構成ステップでconfigure()、必要な高レベルのツールをインスタンス化し、可能であれば高レベルのツール(check_cfg()ハンドルなど)を使用して外部ライブラリとの関係を定義するか、定義にpkg-config(1)フォールバックします。{DEFINES,INCLUDE,LIB,...}_$LIBNAME
def configure(cfg):
    # I want to do C with any available compiler
    cfg.load("compiler_c") # will detect MSVC, GCC, or other common compilers

    # always include cwd
    cfg.env.INCLUDES += ['.']

    # I want to link all my programs with pthread
    cfg.env.LIB += ['pthread']

    # I want to link with static zlib
    cfg.env.STLIB_Z += ['z']

    # I want to use pkg-config to tell me how to link with pjsip
    # and avoid typing the risky -DPJ_AUTOCONF=1 -pipe -O2 -march=k8-sse3 -mcx16 -msahf -mno-movbe -mno-aes -mno-pclmul -mno-popcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-tbm -mno-avx -mno-sse4.2 -mno-sse4.1 --param l1-cache-size=64 l1-cache-line-size=64 l2-cache-size=512 -mtune=k8 -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1 -I/home/portage/tmp/net-libs-pjsip-1.12/image//usr/include  -L/home/portage/tmp/net-libs-pjsip-1.12/image//usr/lib -lpjsua -lpjsip-ua -lpjsip-simple -lpjsip -lpjmedia-codec -lpjmedia -lpjmedia-audiodev -lpjnath -lpjlib-util -lresample -lmilenage -lsrtp -lg7221codec -lpj -lm -luuid -lnsl -lrt -lpthread -lasound -lcrypto -lssl -lopencore-amrnb
    # the *_PJSIP variables will be created
    cfg.check_cfg(package='libpjproject',
                  uselib_store='PJSIP',
                  args='--libs --cflags',)

*FLAGSコンパイラ固有であるため、可能であれば使用を避けてください。

  • 標準のmakefileルールを高レベルのルールに置き換えます(でインスタンス化されたツールを使用configure())。
bld(target='mylib',
    features='c', # see note
    source=['a.c', 'b.c'],
    use=['Z', 'PJSIP'],
    )

bld(target='name',
    features='c cprogram',
    source=['main.c'],
    use=['mylib'],
    )
  • 非標準のルールと高レベルのツールは、必要に応じて作成できます。wafbookを参照してください。

全体として、ビルドスクリプトは、makefileよりも短くて読みやすくなります。それらはより直線的であり、それらの内容はより意味的です。

静的ライブラリをエクスポートする予定がない場合は、静的ライブラリを作成する必要がないことに注意してください。wafツールはシェルを使用してプログラムを呼び出さないため、コマンドラインの長さの制限(内部静的ライブラリを作成する主な理由)は問題になりません。

于 2012-02-05T16:54:57.520 に答える