通过调用python函数的Scons自定义构建器不起作用

问题描述 投票:0回答:2

我通过调用python函数,SConstruct代码创建一个构建器:

def compile_c(dsts, srcs, env):
  for (src, dst) in zip(srcs, dsts):
    print src, dst
    com2 = [
    "mkdir -p %s" % os.path.dirname(dst),
    "rm -f %s" % dst,
    "%s -M %s -Wno-error %s > %s.tmp" % (env['CC'], ' '.join(env['CFLAGS']), src, dst),
    "sed 's,\($*\)\.o[ :]*,%s/objects/c/\1.o %s : ,g' < %s.tmp > %s" % (env['RUNRULE_DIR'], dst, dst, dst),
    "rm -f %s.tmp" % dst
    ]
    for com in com2:
      print com
      if os.system(com):
        exit(1)
  return None
bld = Builder(action = compile_c)
env = Environment(BUILDERS = {'Foo' : bld})
env["C_D"] = ['../RunRules/Simulation/objects/c/ThreeDAverageVariableCpuCode.d']
env["C_SRC"] = ['ThreeDAverageVariableCpuCode.c']
env.Foo(env["C_D"], env["C_SRC"])

目标文件不存在,但是当我构建它时没有任何效果并忽略打印功能:

awp-max/CPUCode ▸ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.
awp-max/CPUCode ▸

目标文件仍然不存在。

python builder scons
2个回答
0
投票

我通过将env ['C_D']修改为绝对路径来解决这个问题。


0
投票

您正在尝试构建当前目录之外的目标。在这种情况下,您必须在命令行上指定目标的相对路径,例如:

scons ../RunRules/ThreeDAverageVariableCpuCode.d

或者使用绝对路径,如您自己的答案所示。

要阅读这个主题,请访问我们的FAQ page,特别是阅读我们“最常见的常见问题解答”#2的评论(您可以在页面顶部找到一个链接)。

© www.soinside.com 2019 - 2024. All rights reserved.