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