使用scons在'src'以外的目录中构建不会将deps复制到variant_dir

时间:2012-11-01 02:52:03

标签: d scons

我正在尝试将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文件位于项目/.

2 个答案:

答案 0 :(得分:1)

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

他们正在讨论尽快在SCons dev电子邮件列表中添加此功能,但他们还没有说过。

我注意到了一些可以在脚本中改进的东西:

在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之前。而不是使用LINKFLAGS使用LIBPATH,而SCons将在-L之前添加。

答案 1 :(得分:-1)

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

env.SConscript('src/SConscript', variant_dir = 'build_debug',
               exports = {'DFLAGS' : '-debug'}, duplicate=0)