scons帮助备用构建工具

时间:2009-08-24 18:47:43

标签: scons ti-dsp

我正在使用TI DSP的编译器,因此默认的CC和LINK以及AS工具毫无意义。下面是一个适合我的SConstruct文件,我想知道是否有人有建议让它变得更好。一些问题:

  1. 我想以某种方式告诉它我的.obj文件应该放在与源.c文件不同的目录中。 (它需要知道在哪里,为了找出链接步骤的SOURCES,以及编译/链接的依赖关系)将它与编译器的“-fr”和“-fs”参数联系起来会很好,但我不介意手动这样做。
  2. 下面的SConstruct文件中有一些库存C文件,所有文件都以DSP2804x_的前缀开头。现在scons无法弄清楚这些的依赖关系,因为我猜它希望.obj文件存在于同一目录中,而我对编译器使用“-fr”和“-fs”意味着那些.obj文件最终与SConstruct文件位于同一目录中。有一个更好的方法吗?我猜我应该有一个构建步骤,将这些引用文件复制到本地目录中:如果我更改它们,我希望更改传播到所有使用它们的项目。
  3. ...叹息

    env = Environment(
       CC = 'C:/appl/ti/ccs/3.3/C2000/cgtools/bin/cl2000',
       CCCOM = '$CC $CFLAGS $CCFLAGS $SOURCES',
       CCFLAGS = Split('-g -q -pdr -d"_DEBUG" -d"LARGE_MODEL" -ml -mt -v28'),
    
       LINKCOM = '$LINK $LINKFLAGS ${SOURCES.file} -o ${TARGET.base}.out',
       LINK = 'C:/appl/ti/ccs/3.3/C2000/cgtools/bin/cl2000',
       LINKFLAGS = Split('-z -q -c -ecode_start -stack0x200 -w -x'),
    
       ASCOM = '$CC $CFLAGS $CCFLAGS $SOURCES',
    #Bizarre but true. assembly is just like compiling C.
       );
    
    
    includes = {'CCFLAGS' : [
      '-i../common/headers/include',
      '-i../common/include',
      '-fr.',
      '-fs.'
      ]};
    env.MergeFlags(includes);
    
    links = {'LINKFLAGS' : [
      '-m./Debug/Example_2804xGpioToggle.map',
      '-i../common/headers/include', 
      '-iC:/appl/ti/ccs/3.3/C2000/xdais/lib',
      '-iC:/appl/ti/ccs/3.3/C2000/cgtools/lib', 
      '-lrts2800_ml.lib',
      '../common/cmd/28044_RAM_lnk.cmd',
      '../common/headers/cmd/DSP2804x_Headers_nonBIOS.cmd'
      ]};
    env.MergeFlags(links);
    
    print "CCCOM is:", env['CCCOM'], "\n", env['LINKCOM'], '\n', env['ASCOM'];
    
    env.Program('blink_gpio', [
      'Example_2804xGpioToggle.c',
      '../common/headers/source/DSP2804x_GlobalVariableDefs.c',
      '../common/source/DSP2804x_CodeStartBranch.asm',
      '../common/source/DSP2804x_DefaultIsr.c',
      '../common/source/DSP2804x_PieCtrl.c',
      '../common/source/DSP2804x_PieVect.c',
      '../common/source/DSP2804x_SysCtrl.c'
      ]);
    

1 个答案:

答案 0 :(得分:1)

我在编译器标记中执行hierarchical build并使用-fr=${TARGET.dir}解决了这两个问题。