7

簡単な質問ですが、答えはわかりません。

インクルードが含まれるビルドsconsがあるとします。代わりにwithをオーバーライドしたいファイルが1つあります。どうすればこれをsconsで行うことができますか?CCFLAGS-O1needsOptimization.cpp-O1-O2


更新:これは私がbialixの答えに基づいてやったことです:

私のSConscriptファイル:

Import('env');

env2 = env.Clone();
env2.Append(CCFLAGS=Split('-O2 --asm_listing'));

sourceFiles = ['main.cpp','pwm3phase.cpp'];
sourceFiles2 = ['serialencoder.cpp','uartTestObject.cpp'];
objectFiles = [];
objectFiles.append(env.Object(sourceFiles));
objectFiles.append(env2.Object(sourceFiles2));
   ...

以前、このファイルは次のとおりでした。

Import('env');

sourceFiles = ['main.cpp','pwm3phase.cpp','serialencoder.cpp','uartTestObject.cpp'];
objectFiles = env.Object(sourceFiles);
   ...
4

2 に答える 2

9

Object()ビルダーを使用してコンパイルをきめ細かく制御し、これらのオブジェクトをProgram()ビルダーに渡します。

例:の代わりに:

env = Environment()
env.Program(target='foo', source=['foo.cpp', 'bar.cpp', 'needsOptimisation.cpp'])

以下を使用する必要があります。

env = Environment()
env_o1 = env.Clone()
env_o1.Append(CCFLAGS = '-O1')

env_o2 = env.Clone()
env_o2.Append(CCFLAGS = '-O2')

# extend these lists if needed
SRC_O1 = ['foo.cpp', 'bar.cpp']
SRC_O2 = ['needsOptimisation.cpp']

obj_o1 = [env_o1.Object(i) for i in SRC_O1]
obj_o2 = [env_o2.Object(i) for i in SRC_O2]

env.Program(target='foo', source=obj_o1+obj_o2)

Object()呼び出しでCCFLAGS ='-O2'を指定すると、env変数の個別のクローンの作成を回避できます。

obj_o2 = [env.Object(i, CCFLAGS=env['CCFLAGS'] + ['-O2']) for i in SRC_O2]
于 2010-01-06T16:28:26.047 に答える
6

別の環境変数の作成を回避するには、次のようなものが必要です(参照:bialixの回答)。

 obj_o2 = env.Object(SRC_O2, CCFLAGS=env['CCFLAGS'] + ['-O2']);

これを行う場合(またはbialixのようにforループで)

 obj_o2 = env.Object(SRC_O2, CCFLAGS='-O2');

次に、すべての組み込みフラグを失います。

于 2010-07-15T19:46:37.700 に答える