我一直在尝试让scons将exe,obj,lib和dll文件输出到特定的构建目录.
我的文件结构如下所示:
/projectdir
/build
/bin
/obj
/source
/subdirs
/..
SConstruct
Run Code Online (Sandbox Code Playgroud)
基本上,我现在得到的是我的源目录被obj文件污染了.我宁愿把它放在一个地方.
SConstruct文件如下所示:
env.VariantDir('build', 'source', duplicate = 0)
env.Program('Hierarchy', source = ['source/sconstest.cpp', 'source/utils/IntUtil.cpp'])
Run Code Online (Sandbox Code Playgroud)
ric*_*chq 10
我发现最简单的方法是使用2个文件,一个SConstruct文件和一个单独的SConscript.
在SConstruct中,您只需调用另一个文件并指定构建输出的目录:
# content SConstruct
SConscript('main.scons', variant_dir='build', duplicate=0)
Run Code Online (Sandbox Code Playgroud)
然后在'main.scons'中你做你构建的肉.您可以忘记此文件中的变体目录.
# content of main.scons
env = Environment()
env.Program('Hierarchy',
source = ['source/sconstest.cpp', 'source/utils/IntUtil.cpp'])
Run Code Online (Sandbox Code Playgroud)
使用仅一个SConstruct文件(对于一个小项目)使VariantDir工作并不困难,但由于单文件和双文件用例的配置不同,因此非常困惑.
只有SConstruct:
env = Environment()
env.VariantDir('build', 'src', duplicate=0)
files = Glob('build\*.c')
env.Program("build\program", files)
Run Code Online (Sandbox Code Playgroud)
请注意源文件的位置,.\src但.\build指定为位置.输出也必须"加前缀",.\build否则编译的程序将驻留在SConstruct文件的目录中.
当您执行脚本时,SCons将编译*.c文件.\src并将结果对象放入.\build.
难怪他们将BuildDir重命名为VariantDir以试图避免混淆(没有太大的成功).