在除';src&x27;使用SCON时,不会将DEP复制到variant_dir

在除';src&x27;使用SCON时,不会将DEP复制到variant_dir,d,scons,D,Scons,我正试图在我的项目中使用SCON。到目前为止,我有以下几点: 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.App

我正试图在我的项目中使用SCON。到目前为止,我有以下几点:

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\u debug
表明并非所有文件都已复制

我想我早就开始工作了;但从那以后我一定把事情搞砸了

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

中,scon不支持源代码外生成,因此不要对意外行为感到惊讶

他们正在讨论不久将此功能添加到SCons开发人员的电子邮件列表中,但他们没有说何时添加

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

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

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

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

但实际上,SCON不会在每个libpath前面加上
-L
。不使用
LINKFLAGS
使用
LIBPATH
,然后SCons将在
-L

前加上前缀。您可以尝试将
duplicate
参数设置为
0

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

但是我的印象是variant_dir的目的是在源代码树之外的目录中构建它?谢谢LIBPATH的事情。@Intrivator,听起来我们需要澄清一下。SCons只支持构建与根SConstruct位于同一子目录结构中的源代码,与variant_dir的位置类似。通常,源代码外是指将variant_dir指定为不在SConstruct下的目录。你想做什么?也许我的术语弄错了;我将更新问题以澄清:“SCON不支持源代码外构建”。我不明白。variant_dir不应该使源代码外的构建工作正常吗?提问者的构建目录不是在SConstruct下面吗?我的问题是它没有复制内容。:)无论如何,谢谢你。