5

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

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

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

先感谢您

4

1 回答 1

5

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')

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

于 2010-06-07T19:44:07.417 回答