我需要使用scons爲大型項目生成發佈和調試版本。對於發行版和調試版,它都會生成共享庫和靜態庫。在構建目錄結構應該看起來如下:SCons:單個SConscript文件中的不同variant_dir
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文件夾執行它可以生成共享和靜態庫,並與對象相關文件,有沒有什麼辦法,我可以使用variant dir,其方式是爲SharedLibrary使用目標目錄作爲{dll/lib_rel,dll/lib_dbg},對於StaticLibrary方法,它使用variant_dir作爲{lib/lib_rel,lib/lib_dbg}
一種可能的方法是爲SharedLibrary和StaticLibrary分別提供SConscript。但這是非常典型的,每個庫生成器方法都需要兩個不同的文件。
請提出適當的解決方案。
庫名稱不應ç更改,而不同的庫所在的目錄名稱應該不同。 – Brady
@Brady,是的,這裏我的問題不是關於更改庫名稱,我正在尋求解決方案來在'lib'目錄內創建lib_rel/libfoo.a和lib_dbg/libfoo.a並且類似地lib_rel/libfoo.so和lib_dbg/libfoo.so在'dll'目錄內。我需要爲此做些什麼改變? –