0

extras/boost.py が追加された waf 1.7.9 を使用すると、構成時にライブラリを取得する必要があることがわかりました。これにより、さまざまなライブラリ セットでターゲットをビルドすることが難しくなります。たとえば、boost のヘッダー ファイルのみを必要とするプログラム (プログラム 'a') と、いくつかのライブラリを使用するプログラム (プログラム 'b') の 2 つのプログラムがあります。これが私の解決策ですが、私の質問は次のとおりです。これを行うためのより良い/好ましい方法はありますか?

#! /usr/bin/env python
# encoding: utf-8

def options(opt):
    opt.load('compiler_cxx boost')

def configure(conf):
    conf.load('compiler_cxx boost')

    conf.check_boost()
    conf.env.DEFINES_BOOST = ['NDEBUG']

    conf.env.LIB_BOOST_FILESYSTEM = conf.boost_get_libs('filesystem system')[-1]
    conf.env.LIB_BOOST_PROGRAM_OPTIONS = conf.boost_get_libs('program_options')[-1]

def build(bld):
    # program 'a' requires header-only part of boost
    bld.program(
        target = 'a',
        source = 'a.cpp',
        use = ['BOOST'] )

    # program 'b' requires link to some boost libraries
    bld.program(
        target = 'b',
        source = 'b.cpp',
        use = ['BOOST', 'BOOST_FILESYSTEM', 'BOOST_PROGRAM_OPTIONS'] )
4

1 に答える 1

1

望ましい方法があるかどうかはわかりませんが、魔法が少ないと思う方法があります。基本的に、ブーストエクストラは使用しないでください。それなしで含めるライブラリを正確に指定できます。

#!/usr/bin/env python
# encoding: utf-8

def options(opt):
    opt.load('compiler_cxx')

def configure(conf):
    conf.load('compiler_cxx')

    # NOTE: The uselib_store keyword argument is not necessary here, it is just added
    # So that it is clear what name is required to use it during building.
    conf.check(compiler='cxx',lib='boost_filesystem',uselib_store='BOOST_FILESYSTEM')
    conf.check(compiler='cxx',lib='boost_program_options',uselib_store='BOOST_PROGRAM_OPTIONS')

    # NOTE: I don't know what DEFINES_BOOST is used for
    # conf.env.DEFINES_BOOST = ['NDEBUG']
    # This will give you a command line define
    conf.define('NDEBUG,'',quote=False)

def build(bld):
    # NOTE: Specifying include directories is dependent on your platform. I think Waf
    # takes care of this for you, but I'm putting it here for effect.
    inc = ['/usr/include']

    # program 'a' requires header-only part of boost
    bld.program(
        target = 'a',
        source = 'a.cpp',
        use = []
        includes = inc )

    # program 'b' requires link to some boost libraries
    bld.program(
        target = 'b',
        source = 'b.cpp',
        use = ['BOOST_FILESYSTEM', 'BOOST_PROGRAM_OPTIONS'],
        includes = inc)
于 2013-03-04T19:11:09.770 に答える