3

wafでライブラリをビルドしたいのですが、ターゲット名とは別の名前でインストールしてしまいます。できるらしい

bld.shlib(..., install_path='${PREFIX}/lib')

しかし、私は次のようなことができる必要があります:

bld.shlib(..., install_as='${PREFIX}/lib/xyz')

また、 bld.install_as() は、タスクをターゲットとして受け入れないように見えるため、機能しません。また、タスクをターゲットを表すノードに変換する方法がわからないため、次のいずれも機能しません。

tgt = bld.shlib(...)
bld.install_as('foo', tgt)

または、ライブラリ名に自動的に追加される「lib」プレフィックスを無効にできるようにする必要がありますが、ビルド中にすべてのライブラリではなく、この 1 つのライブラリに対してのみです。

bld.shlib(..., libprefix='', install_path="${PREFIX}/lib/")

shlib_PATTERN も設定できることは知っていますが、それは現在の環境のすべてのライブラリに影響するようです。デバッグ/リリースを同時にビルドするために多くの異なる環境を使用するかなり複雑なビルドがあるため、現在の環境を複製してフラグを変更するだけでは機能しません。これは、ターゲットが最終的にビルドされる環境ではなく、デフォルトの環境を複製するためです。 (ビルド時に各環境のターゲットを複製するため)。

何かご意見は?ありがとう!

4

2 に答える 2

7

あなたはこれを行うことができます:

hello_lib = bld.shlib(
       includes='/usr/include/python',
       source='a.cpp',
       target='hello',
       uselib='BOOST_PYTHON',
       vnum='0.0.1')
hello_lib.env.cxxshlib_PATTERN = '%s.so'

このコードは、1 つのタスクのみの命名パターンを変更します。

于 2012-02-10T08:56:17.113 に答える
1

使用できるキーワード引数は、「name」と「target」の 2 つです。「ターゲット」は作成するファイルの名前で、「--target」引数を使用した場合の名前はターゲットの名前です。紛らわしいですが、例を次に示します。

bld(features=['cxx','cxxshlib'],
    source=src,
    includes=inc,
    target='OutputName',
    name='NameOfTarget',
    use=libs,
    install_path='${PREFIX}/lib/MyLibs
    )

waf configure build install --target=NameOfTarget --prefix=/home/Brian

これにより、共有ライブラリ「libOutputName.so」が作成され、/home/Brian/lib/MyLib にインストールされます。

于 2012-01-26T16:15:55.703 に答える