1

我正在尝试将 scons 用于我的项目。到目前为止,我有以下内容:

SConstruct

path = ['/usr/local/bin', '/usr/bin', '/bin']
libpath = ['/usr/local/lib', '/usr/lib', '/lib']
env = Environment()
env.Append(ENV = {'PATH' : path})
env.Append(DFLAGS = ['-version=placeholder', '-g'])
env.Append(LIBPATH = libpath)
env.Append(DPATH = '#/build_debug/')
Export('env')
env.SConscript('src/SConscript', variant_dir = 'build_debug',
               exports = {'DFLAGS' : '-debug'})

src/SConscript

Import('env')
env.Program(target = 'a.out',
            source = ['stubs.d'] + Glob('*/*.d'))

但是,在尝试构建时,它会给出:

build_debug/foo/foo.d:9: Error: module bar is in file 'bar/bar.d' which cannot be read

检查ls build_debug表明并非所有文件都已复制。

我认为我早先有这个工作;但从那以后我一定把事情搞砸了。

编辑:我所有的源代码都位于 project/src/ 中,我希望构建发生在 project/build/ 中;我的 SConstruct 文件位于 project/.

4

2 回答 2

1

SCons 不支持外源构建,所以不要对意外行为感到惊讶。

他们正在谈论尽快在 SCons 开发电子邮件列表中添加此功能,但他们没有说明何时。

我注意到您的脚本中有一些可以改进的地方:

在 SConstruct 中对 SConscript() 的调用中,导出的是 DFLAGS 变量,但在 SConscript 中,您只导入了“env”,因此 DFLAGS 变量不可见。您应该导入 DFLAGS,或者只是将 env 中的 DFLAGS 设置为不同的变量,然后从 SConscript 中的 env 中获取它。

另外,我不确定库路径是否可以正常工作。你有这个:

libpath = ['/usr/local/lib', '/usr/lib', '/lib']
env.Append(LINKFLAGS = libpath)

但是,SCons 不会在-L每个 libpath 之前添加。SCons 将不使用LINKFLAGSuse ,而是将.LIBPATH-L

于 2012-11-01T09:49:20.200 回答
-1

您可以尝试将duplicate参数设置为0

env.SConscript('src/SConscript', variant_dir = 'build_debug',
               exports = {'DFLAGS' : '-debug'}, duplicate=0)
于 2012-11-05T10:00:43.880 回答