我需要使用 scons 为大型项目生成发布和调试版本。对于发布和调试版本,它会生成共享库和静态库。构建后的目录结构应如下所示:
project_dir/
|_ src
|_ include
|_ lib
|_ lib_rel
|_ lib_dbg
|_ dll
|_ dll_rel
|_ dll_dbg
我怎样才能实现 SConstruct 和 SConscript 遵守上述要求?
SConstruct 实现:
env = Environment()
relEnv = env.clone(CCFLAGS = ['-O3', '-pthread')]
dbgEnv = env.clone(CCFLAGS = ['-O0', '-g', '-pthread')]
SConscript(dirs = 'src', name = 'SConscript', exports = {'env' : relEnv}, variant_dir = 'lib_rel', duplicate = 0)
SConscript(dirs = 'src', name = 'SConscript', exports = {'env' : dbgEnv}, variant_dir = 'lib_dbg', duplicate = 0)
src/SConscript 实现:
Import('env')
src_list = Glob('*.cpp')
inc_list = ['dir_1/include', 'dir_2/include', 'common/include']
env.SharedLibrary(target = 'foo', source = src_list, CPP_PATH=inc_list)
env.StaticLibrary(target = 'foo', source = src_list, CPP_PATH=inc_list)
使用上面的实现,它可以在 lib_rel 文件夹和相关的目标文件中生成共享和静态库,有没有什么方法可以使用变体目录,对于 SharedLibrary,它使用目标目录作为 {dll/lib_rel , dll/lib_dbg} 和对于 StaticLibrary 方法,它使用 variant_dir 作为 {lib/lib_rel, lib/lib_dbg}
一种可能的方法是为 SharedLibrary 和 StaticLibrary 设置单独的 SConscript。但是这是非常典型的,每个库构建器方法都需要两个不同的文件。
请为此提出适当的解决方案。