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

时间:2018-01-03 04:06:45

标签: python builder scons

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

model

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

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"])

目标文件仍然不存在。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

scons ../RunRules/ThreeDAverageVariableCpuCode.d

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

要阅读此主题,请访问我们的FAQ page,特别是阅读有关我们&#34;最常见问题解答的第2条的评论&#34; (您将在页面顶部找到一个链接)。