gpt4 book ai didi

scons:覆盖一个文件的构建选项

转载 作者:行者123 更新时间:2023-12-01 23:23:45 26 4
gpt4 key购买 nike

很简单的问题,但我不知道答案。

假设我有一个 scons 版本,其中我的 CCFLAGS 包含 -O1。我有一个文件 needsOptimization.cpp,我想用 -O2 覆盖 -O1 。我怎么能在 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);
...

最佳答案

使用 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' ,则可以避免创建环境变量的单独克隆:

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

关于scons:覆盖一个文件的构建选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2013622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com