如何强制SConscript构建器更改目录?

时间:2010-06-07 08:53:25

标签: delphi scons

目前我正在尝试将一个百万个sloc遗留项目从枯燥的.cmd脚本移植到SCons。部分内容是VC ++,其他部分是Delphi。为C ++片段创建SConscripts是轻而易举的。

为了构建delphi部分,我编写了一个非常简单的构建器,它可以检测它是程序还是库项目。通过SConscript链接后调用构建器使得scons调用dcc32 $ subdir / project.dpr会误导dcc32查找当前目录中的单位而不是$ subdir。

有没有办法告诉scons在执行驻留在sconscript中的命令之前输入$ subdir,还是应该在构建器中修复它?

提前谢谢

1 个答案:

答案 0 :(得分:5)

SCons在读取时已经更改了子目录SConscripts的目录,所以看起来问题必须在实际构建器中修复。

解析脚本后,SCons正在运行构建命令,它将保留在顶级目录中。然后使用相对于该顶级目录的路径名发出命令。更改此行为的方法是在Builder中使用chdir关键字。

scons手册页中的示例如下:

b = Builder(action='build < ${SOURCE.file} > ${TARGET.file}',
            chdir=1)
env = Environment(BUILDERS = {'MyBuild' : b})
env.MyBuild('sub/dir/foo.out', 'sub/dir/foo.in')

您需要指定.file组件,因为使用chdir不会更改传递给构建器的名称,即它们仍然相对于顶级目录。