SConscript文件是用来指定哪些文件会加入编译。先来分析下BSP主目录下的SConscript文件:
import rtconfig
Import('RTT_ROOT')
from building import *
src_bsp = ['application.c', 'startup.c', 'board.c', 'stm32f10x_it.c']
src_drv = ['rtc.c', 'usart.c', 'serial.c', 'led.c']
if GetDepend('RT_USING_DFS'):
if rtconfig.STM32_TYPE == 'STM32F10X_HD':
src_drv += ['sdcard.c']
else:
src_drv += ['msd.c']
if GetDepend('RT_USING_LWIP'):
src_drv += ['enc28j60.c'] + ['dm9000a.c']
if GetDepend('RT_USING_RTGUI'):
src_drv += ['touch.c', 'calibration.c']
if GetDepend('RT_USING_RTGUI'):
if rtconfig.RT_USING_LCD_TYPE == 'FMT0371':
src_drv += ['lcd_a70.c']
elif rtconfig.RT_USING_LCD_TYPE == 'ILI932X':
src_drv += ['ili_lcd_general.c']
elif rtconfig.RT_USING_LCD_TYPE == 'SSD1289':
src_drv += ['ssd1289.c']
src = src_bsp + src_drv
CPPPATH = [ GetCurrentDir() ]
CPPDEFINES = []
group = DefineGroup('Startup', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
Return('group')
GetCurrentDir函数可以获得当前SConscript文件所在的目录。所以使用这个也能够方便的把一个组件的目录包含到工程的头文件搜索路径中。
DefineGroup用于定义一个组件。组件可以是一个目录(下的文件或子目录),也是后续一些IDE工程文件中的一个Group或文件夹。
函数原型为: DefineGroup(name, src, depend, **parameters),包括四个参数:
-
'name'来定义这个group的名字
-
src用于定义这个Group中包含的文件,一般指的是C/C++源文件。方便起见,也能够通过Glob函数采用通配符的方式列出SConscript文件所在目录中匹配的文件。
-
depend 用于定义这个Group编译时所依赖的选项(例如finsh组件依赖于RT_USING_FINSH宏定义)。编译选项一般指rtconfig.h中定义的RT_USING_xxx宏。当在rtconfig.h配置文件中定义了相应宏时,那么这个Group才会被加入到编译环境中进行编译。如果依赖的宏并没在rtconfig.h中被定义,那么这个Group将不会被加入编译。相类似的,在使用scons生成为IDE工程文件时,如果依赖的宏未被定义,相应的Group也不会在工程文件中出现。
-
parameters则可以输入一组字符串,后面还可以加入的参数包括:
CCFLAGS – C源文件编译的参数;
CPPPATH – 应该额外包含的头文件路径;
CPPDEFINES – C源文件编译时额外的宏定义;
LINKFLAGS – 连接时应该添加的参数。
LIBRARY – 包含此参数,则会将组生成的目标文件打包成库文件。
参考资料来源:http://www.rt-thread.org/
文章评论(0条评论)
登录后参与讨论