10

GNU autotools よりもはるかに簡単ですっきりしているように見えるので、wafを使用して共有ライブラリを構築したいと考えています。

実際、私が書き始めた wscript に関して、これまでにいくつかの質問があります。

VERSION='0.0.1'
APPNAME='libmylib'

srcdir = '.'
blddir = 'build'

def set_options(opt):
 opt.tool_options('compiler_cc')
 pass

def configure(conf):
 conf.check_tool('compiler_cc')
 conf.env.append_value('CCFLAGS', '-std=gnu99 -Wall -pedantic -ggdb')

def build(bld):
 bld.new_task_gen(
  features = 'cc cshlib',
  source = '*.c',
  target='libmylib')

を含む行はsource = '*.c'機能しません。ワイルドカードを使用する代わりに、すべての .c ファイルを指定する必要がありますか?

たとえば、デバッグ ビルドを有効にするにはどうすればよいですか (現在、wscript はデバッグ ビルド CFLAGS を使用していますが、これをエンド ユーザーに対してオプションにしたいと考えています)。

ライブラリソースはサブディレクトリ内にあり、lib を使用するプログラムはそれぞれ独自のサブディレクトリにあることが計画されています。

4

2 に答える 2

6

最新バージョンのwaf(執筆時点では1.5.9)を使用していると仮定するとglob()、ビルドコンテキストのメソッドを介してワイルドカードを指定できます。したがって、次のように書くことができます。

bld.new_task_gen(
    features = 'cc cshlib',
    source = bld.glob('*.c'),
    target='mylib')

globを持たない古いバージョンのwafを使用していた場合は、次の方法find_sources_in_dirsを使用できます。

lib = bld.new_task_gen(
    features = 'cc cshlib',
    target = 'mylib')
lib.find_sources_in_dirs('.')

このメソッドはまだWafにありますが、非推奨になる予定であり、最終的にはなくなる可能性があります。

srcdirおよび変数はオプションになっているため、これらblddirは必要ありません。デフォルトは「。」です。とにかく「ビルド」します。ターゲット名の前に「lib」を付けないでください。これはプラットフォーム固有の方法で自動的に行われます(Windowsではlibは追加されず、共有ライブラリは.dllを使用します)。デバッグとリリースのビルドは、驚くほど厄介な問題です。もともとWafにはこの機能が含まれていましたが、ある時点で削除され、再度追加されることはありませんでした。これはメーリングリストでよくあるリクエストなので、将来再表示される可能性があります。一方、gjcのcflagsモジュールを使用するよりもはるかに悪いことをする可能性があります。プロジェクトディレクトリに追加するだけです。最終的なwscriptは次のようになります。

VERSION='0.0.1'
APPNAME='mylib'

def set_options(opt):
    opt.tool_options('compiler_cc')
    opt.tool_options('cflags', tooldir='.')

def configure(conf):
    conf.check_tool('compiler_cc')
    conf.check_tool('cflags', tooldir='.')

def build(bld):
    bld.new_task_gen(
        features = 'cc cshlib',
        source = bld.glob('*.c'),
        target=APPNAME)

また、デバッグビルドを設定するには、次のコマンドを実行します。

./waf configure -d debug

独自のサブディレクトリでライブラリを使用している場合は、おそらく最上位のwscriptがあり、このbld.add_subdirs()手法を使用してライブラリ/プログラムディレクトリを追加する必要があります。各サブディレクトリには、独自のwscript_buildファイルがあります。次に、export_incdirsanduselib_localプロパティを使用して、ライブラリとプログラムの「モジュール」の間に正しいインクルードディレクトリを指定できます。

于 2009-10-21T07:58:24.040 に答える