我通过调用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 ▸
目标文件仍然不存在。
我通过将env ['C_D']修改为绝对路径来解决这个问题。
您正在尝试构建当前目录之外的目标。在这种情况下,您必须在命令行上指定目标的相对路径,例如:
scons ../RunRules/ThreeDAverageVariableCpuCode.d
或者使用绝对路径,如您自己的答案所示。
要阅读这个主题,请访问我们的FAQ page,特别是阅读我们“最常见的常见问题解答”#2的评论(您可以在页面顶部找到一个链接)。