多くのライブラリと実行可能ファイルを含む、いくつかのサブディレクトリを持つかなり複雑な scons システムがあります。現在、すべての SConscript は独自の複製された環境を取得しているため、SConscript ごとに CFLAGS (またはその他の変数) を簡単に変更できますが、ターゲットごと、さらにはオブジェクト内のファイルごとに変更したいと考えています。目標。
次のように、問題を説明するために SConscript と SConstruct の簡単な例を作成しました。
Sコンストラクト:
env = Environment()
env['CFLAGS'] = '-O2'
env.SConscript('SConscript', 'env')
SConscript:
Import('env')
env=env.Clone()
env.Program('foo', ['foo.c', 'bar.c'])
scons を実行すると、foo.c と bar.c の両方が -O2 フラグでコンパイルされます。SConscript 内に追加するだけで、SConscript 全体のフラグを簡単に変更できますが、foo.c をでコンパイルし、bar.c を完全なデバッグでenv['CFLAGS'] = '...'
コンパイルしたいとします。どうすれば(最も簡単な方法で)それを行うことができますか?-O2
-O0 -g
例ではgccを使っていますが、どのコンパイラでも使えるものがいいです。
これは、最適化を行わずにすべてをコンパイルすると許容できないパフォーマンスが発生する、パフォーマンスに敏感なプロジェクトで頻繁に発生しますが、1 つのファイル (またはそれらのサブセット) をデバッグする必要があります。