目前我正在尝试将一个百万个sloc遗留项目从枯燥的.cmd脚本移植到SCons。部分内容是VC ++,其他部分是Delphi。为C ++片段创建SConscripts是轻而易举的。
为了构建delphi部分,我编写了一个非常简单的构建器,它可以检测它是程序还是库项目。通过SConscript链接后调用构建器使得scons调用dcc32 $ subdir / project.dpr会误导dcc32查找当前目录中的单位而不是$ subdir。
有没有办法告诉scons在执行驻留在sconscript中的命令之前输入$ subdir,还是应该在构建器中修复它?
提前谢谢
答案 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
不会更改传递给构建器的名称,即它们仍然相对于顶级目录。