【问题标题】:scons: overriding build options for one filescons:覆盖一个文件的构建选项
【发布时间】:2010-01-06 14:41:15
【问题描述】:

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

假设我有一个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);
   ...

【问题讨论】:

    标签: scons


    【解决方案1】:

    使用 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]
    

    【讨论】:

      【解决方案2】:

      避免创建单独的环境变量需要(参考:bialix's answer)需要这样的东西。

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

      如果你只是这样做(或者像 bialix 那样在 for 循环中这样做)

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

      那么你会丢失所有的内置标志。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多