目前我正在尝试将一个百万小时的遗留项目从沉闷的.cmd脚本移植到SCons.部分内容是VC++,其他部分是Delphi.为C++片段创建SConscripts是轻而易举的.
为了构建delphi部分,我编写了一个非常简单的构建器,它可以检测它是程序还是库项目.通过SConscript链接后调用构建器使得scons调用dcc32 $ subdir/project.dpr会误导dcc32查找当前目录中的单位而不是$ subdir.
有没有办法告诉scons在执行驻留在sconscript中的命令之前进入$ subdir,还是应该在构建器中修复它?
先感谢您
SCons在读取时已经更改为子目录SConscripts的目录,因此看起来问题必须在实际构建器中修复.
解析脚本后,SCons正在运行构建命令,它将保留在顶级目录中.然后使用相对于该顶级目录的路径名发出命令.更改此行为的方法是chdir在Builder中使用关键字.
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')
Run Code Online (Sandbox Code Playgroud)
您需要指定.file组件,因为使用chdir不会更改传递给构建器的名称,即它们仍然相对于顶级目录.