在我们的一个项目中,我需要使用waf
构建一个库。
该库有多个步骤,例如构建二进制文件,然后执行二进制文件
生成更多文件,这些文件包含在进一步的构建中。
要运行二进制文件(在中间步骤中生成),我需要它
path - as string,这样我就可以为二进制文件添加前缀。从Waf书中,我看到了一个例子,并且
一些对bld.path.find_dir()
和bld.path.parent.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
P.S这可能看起来相当微不足道,但我来自make
背景,而且来自
waf
!
感谢。
- 编辑 -
我可以在这里构建my_binary
,但我想获得它的abs路径,并在后续步骤中引用它
答案 0 :(得分: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'