用于定义工具链的路径,以及全局的编译参数。
PLATFROM(编译平台)
EXEC_PATH(工具链路径)
PREFIX(工具链程序的前缀)
ARCH(CPU架构)
CPU(CPU型号)
CC(C编译器)
POST_ACTION(编译完成后需执行的动作)
。以上变量会被rt-thread的辅助编译脚本(比如building.py
)使用。 ARCH
CPU
会被用于寻找libcpu的路径。POST_ACTION
定义的命令串,以换行符\n
分割,最后通过命令行执行。CXX(C++编译器)
AS(汇编器)
AR(打包工具)
LINK(链接器)
CFLAGS
LFLAGS
CXXFLAGS
AFLAGS
只会在SConstuct中使用,可以使用自定义名称。SIZE(计算目标文件大小)
OBJDUMP(反汇编工具)
OBJCOPY(bin/hex文件生成工具)
STRIP(删除目标文件中符号的工具)
仅在POST_ACTION
使用。TARGET(目标文件名称)
TARGET_EXT(目标文件后缀)
,这个仅给SConstuct使用,可以在rtconfig.py中定义TARGET_FILE = ‘build/’ + TARGET + '.elf'
,然后给SConstuct使用。CROSS_TOOL
RTT_ROOT
BUILD
DEVICE
自用,可以不定义。BSP_LIBRARY_TYPE
可以不定义。dist_handle()
函数可以不定义。DEFINES
变量,该变量应该定义为列表型,也即使用[]
进行赋值。scons默认读取的文件,主要初始化一个编译环境,并启动编译。
RTT_ROOT(rt-thread顶层目录)
通常系统中不存在这个环境变量,手动定义时注意相对路径的关系。env = Environment(...)
中增加CPPDEFINES = rtconfig.DEFINES
。也即将rtcofig.py中的全局宏定义传给编译环境。objs = PrepareBuilding(...)
和DoBuilding(...)
之间加一段内容,如下。其中variant_dir
是设置编译的中间文件存放的路径。LIBRARIES_PATH = os.path.asbpath('../../libraries')
objs.extend(SConscript(os.path.join(LIBRARIES_PATH, 'SConscript'), variant_dir='build/libraries', duplicate=0))
日常喜欢使用Qtcreator编辑程序,因而需要使用scons导出Qt工程文件。Qt的pro文件格式十分简单,类似于对INCLUDEPATH(头文件路径列表)
DEFINES(全局宏定义)
HEADER(头文件列表)
SOURCE(源文件列表)
四个变量赋值,文件路径统一使用绝对路径即可。
rt-thread/tools/makefile.py
为rt-thread/tools/qt.py
因为makefile也主要是生成文件列表,和pro文件相像。project['FILES'](源文件列表)
project['HEADERS'](头文件列表)
project['CPPDEFINES'](全局宏定义)
project['CPPPATH'](头文件路径列表)
分别对应输出即可。rtconfig.TARGET
获取。rt-thread/tools/building.py
,搜索makefile
关键字,对比进行修改即可,共有两处需要修改。之后就可以使用scons --target=qt
来生成Qtcreator的工程文件了。rt-thread源码编译时会有警告,我们可以针对rt-thread的源码屏蔽这些警告。
在rt-thread/src/SConscript
中修改如下。这样修改可以使得新添加的cfags仅作用于rt-thread的源码,不作用于自己写的代码。
LOCAL_CCFLAGS = ' -Wno-unused-parameter'
LOCAL_CCFLAGS = ' -Wno-sign-compare'
LOCAL_CCFLAGS = ' -Wno-old-style-declaration'
group = DefineGroup('Kernel', src, depend = [''], CPPPATH = CPPPATH, LOCAL_CCFLAGS = LOCAL_CCFLAGS)
修改rt-thread/tools/gcc.py
约116行,if stderr != ''
为if stderr != b''
即可。