大規模なプロジェクトのリリースおよびデバッグ ビルドを生成するには、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} として使用します
可能なアプローチの 1 つは、SharedLibrary と StaticLibrary に個別の SConscript を使用することです。しかし、これは、各ライブラリ ビルダー メソッドに 2 つの異なるファイルが必要であるという非常に典型的なものです。
これに対する適切な解決策を親切に提案してください。