如何强制Scons输出(exe,obj,lib和dll)到特定的构建目录?

Wal*_*art 12 scons

我一直在尝试让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)


AMi*_*sin 7

使用仅一个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以试图避免混淆(没有太大的成功).