scons: переопределение параметров сборки для одного файла - PullRequest
7 голосов
/ 06 января 2010

Простой вопрос, но я не знаю ответа.

Допустим, у меня есть scons сборка, где мой CCFLAGS включает -O1. У меня есть один файл needsOptimization.cpp, где я бы хотел переопределить -O1 с помощью -O2. Как я мог сделать это в scons?


обновление : это то, что я закончил, основываясь на ответе 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);
   ...

Ответы [ 2 ]

9 голосов
/ 06 января 2010

Используйте Object () Builder для детального управления компиляцией, а затем передайте эти объекты в 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)

Вы можете избежать создания отдельного клона переменной env, если вы укажете CCFLAGS = '- O2' прямо в вызове Object ():

obj_o2 = [env.Object(i, CCFLAGS=env['CCFLAGS'] + ['-O2']) for i in SRC_O2]
6 голосов
/ 15 июля 2010

Чтобы избежать создания отдельной переменной env, требуется (ref: bialix's answer ) нечто подобное.

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

Если вы просто делаете это (или в цикле for, как это делает bialix)

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

тогда вы потеряете все встроенные флаги.

...