waf多步骤构建目标路径

2021-04-12 00:07:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在我们的一个项目中,我需要使用waf构建一个库。 这个库有多个步骤,比如它构建一个二进制文件,然后执行二进制文件 生成更多的文件,这些文件将包含在进一步的构建中。 要运行二进制文件(在中间步骤中生成),我需要 路径作为字符串,这样我就可以给二进制文件加前缀。从Waf的书中,我看到了一个例子 对bld.path.find_dir()和{}的一些引用。 但这些函数不以字符串形式返回路径。 还有一个bld.path.abspath(),它以字符串形式返回源路径。在

我想得到生成的二进制文件的路径。以下是我正在尝试的一个片段:

    bld.program(
                source              =       my_sources,
                target              =       'my_binary', # <-- path to this
                includes            =       my_includes,
                cflags              =       my_cflags,
                linkflags           =       my_ldflags
            )
    bld.add_group()
    # use the above generated binary file

注:这可能看起来很简单,但我来自make背景,而且是新手 waf!在

谢谢。在

--编辑--

我可以在这里构建my_binary,但是我想得到它的abs路径,并在后续步骤中引用它

1条回答
网友
1楼 ·

build/${build_target}/${your_binary}-除非覆盖某些默认值

更新1

一个可以让您继续工作的简化操作,尤其是构建目标的派生,也一定要检查waf book,其中包括很多示例。在

def configure(ctx):
    ctx.load(...)
    ctx.env.appname = APPNAME
    ctx.env.version = VERSION

    ctx.define(...)

    ctx.check_cc(...)


    ctx.setenv('debug', env=ctx.env.derive())
    ctx.env.CFLAGS = ['-ggdb', '-Wall']
    ctx.define('DEBUG',1)

    ctx.setenv('release', env=ctx.env.derive())
    ctx.env.CFLAGS = ['-O2', '-Wall']
    ctx.define('RELEASE',1)


def build(bld):
            ### subdirs :) under build are usually related to build variant or command
            print (">>>>> "+bld.cmd)
            print (">>>>> "+bld.variant)
        bin = bld.program(...)



from waflib.Build import BuildContext

class release(BuildContext):
      cmd = 'release'
      variant = 'release'

class debug(BuildContext):
      cmd = 'debug'
      variant = 'debug'

相关问题