目前,我正在尝试将一个百万 sloc 遗留项目从乏味的 .cmd 脚本移植到 SCons。其中一部分是VC++,其他是Delphi。为 C++ 片段创建 SConscript 是一件轻而易举的事。
为了构建 delphi 部分,我编写了一个非常简单的构建器,它可以检测它是程序还是库项目。通过 SConscript 链接后调用构建器会使 scons 调用 dcc32 $subdir/project.dpr ,这会误导 dcc32 在当前目录而不是 $subdir 中查找单元。
有没有办法告诉 scons 在执行 sconscript 中的命令之前输入 $subdir 或者我应该在构建器中修复它?
提前谢谢
最佳答案
SCons 在读取它们时已经更改为子目录 SConscripts 的目录,因此看起来问题必须在实际构建器中修复。
一旦脚本被解析,并且 SCons 正在运行构建命令,它就会保留在顶级目录中。然后使用相对于该顶级目录的路径名发出命令。更改此行为的方法是在构建器中使用 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
不会更改传递给构建器的名称,即它们仍然相对于顶层目录。
关于delphi - 如何强制 SConscript 构建器更改目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2988115/