【问题标题】:Build in a directory other than 'src' with scons does not copy deps to variant_dir使用 scons 在 'src' 以外的目录中构建不会将 deps 复制到 variant_dir
【发布时间】:2012-11-08 18:33:47
【问题描述】:

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

S构造

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/ 中。

【问题讨论】:

    标签: d scons


    【解决方案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 之前。而不是使用LINKFLAGS 使用LIBPATH,然后SCons 将在-L 前面添加。

    【讨论】:

    • 但我的印象是,variant_dir 的目的是在源代码树以外的目录中构建它?并感谢 LIBPATH 的事情。
    • @Infiltrator,听起来我们需要澄清这一点。 SCons 仅支持构建与根 SConstruct 位于相同子目录结构中的源代码,与 variant_dir 的位置相同。通常out of source是指将variant_dir指定为SConstruct下的目录not。你想做什么?
    • 那么,也许我的术语有误;我将更新问题以澄清。
    • “SCons 不支持超出源代码的构建”。我不明白。 variant_dir 不应该使源外构建工作吗?
    • 提问者的build目录不是在SConstruct下面吗?
    【解决方案2】:

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

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

    【讨论】:

    • 我的问题是它没有复制东西。 :) 无论如何谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多