Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
mdk5 + env环境下,怎么实现条件编译?debug release模式
发布于 2024-12-26 01:41:28 浏览:299
订阅该版
[tocm] 我使用keil5 + env, rtthread4.1.1 构建固件。 *(新手小白,前天才第一次接触env环境,还不太熟悉,rtthread studio试用了一下还不太习惯)。* 我将 template.uvprojx 默认的名称为rthread的Target改成了两个debug + release,如下图.  #### 目的是调试阶段使用debug,发布生产固件时则使用release进行编译。 > 1. debug 阶段使用finsh + jlink rtt可以方便调试 2. release 则全部去掉,然后启用syswatch,以及-O2优化。因为芯片只有64k,bootloader分了20k, rom不够用必须的把finsh裁掉。 为了支持template.uvprojx中有debug + release两个Target,然后我还在debug中添加了_ _DEBUG_ _ 宏。还修改了 > rt-thread/tools/keil.py 的 MDK45Project 方法,如下: ```python # The common part of making MDK4/5 project def MDK45Project(tree, target, script): project_path = os.path.dirname(os.path.abspath(target)) root = tree.getroot() out = open(target, 'w') out.write('\n') CPPPATH = [] CPPDEFINES = [] LINKFLAGS = '' CFLAGS = '' ProjectFiles = [] # add group groups = tree.find('Targets/Target/Groups') if groups is None: groups = SubElement(tree.find('Targets/Target'), 'Groups') groups.clear() # clean old groups for group in script: group_tree = MDK4AddGroup(ProjectFiles, groups, group['name'], group['src'], project_path, group) # get each include path if 'CPPPATH' in group and group['CPPPATH']: if CPPPATH: CPPPATH += group['CPPPATH'] else: CPPPATH += group['CPPPATH'] # get each group's definitions if 'CPPDEFINES' in group and group['CPPDEFINES']: if CPPDEFINES: CPPDEFINES += group['CPPDEFINES'] else: CPPDEFINES = group['CPPDEFINES'] # get each group's link flags if 'LINKFLAGS' in group and group['LINKFLAGS']: if LINKFLAGS: LINKFLAGS += ' ' + group['LINKFLAGS'] else: LINKFLAGS += group['LINKFLAGS'] if 'LIBS' in group and group['LIBS']: for item in group['LIBS']: lib_path = '' for path_item in group['LIBPATH']: full_path = os.path.join(path_item, item + '.lib') if os.path.isfile(full_path): # has this library lib_path = full_path break if lib_path != '': if group_tree != None: MDK4AddLibToGroup(ProjectFiles, group_tree, group['name'], lib_path, project_path) else: group_tree = MDK4AddGroupForFN(ProjectFiles, groups, group['name'], lib_path, project_path) # write include path, definitions and link flags # 这里需要遍历所有target, 并且把target预先定义的宏添加到末尾 # 获取所有Targets下的所有Target节点 targets = tree.findall("Targets/Target") if not targets: raise ValueError("No Targets found in the project file") for target_node in targets: TargetOption = target_node.find("TargetOption") IncludePath = TargetOption.find("TargetArmAds/Cads/VariousControls/IncludePath") IncludePath.text = ";".join( [_make_path_relative(project_path, os.path.normpath(i)) for i in CPPPATH] ) Define = TargetOption.find("TargetArmAds/Cads/VariousControls/Define") pretext = Define.text Define.text = ", ".join(set(CPPDEFINES)) if pretext != "" and Define.text != "": Define.text = Define.text + ", " + pretext print(Define.text) Misc = TargetOption.find("TargetArmAds/LDads/Misc") Misc.text = LINKFLAGS xml_indent(root) out.write(etree.tostring(root, encoding='utf-8').decode()) out.close() ``` 修改后,这样可以把debug和release两个目标都复制到project工程,并且把template预先定义的宏也复制进行了。 所以,现在倒是支持debug + release两种目标了,现在我利用_ _DEBUG_ _宏来做条件编译,比如在rtconfig.h中定义如下: ```c #ifdef _DEBUG_ #define RT_USING_FINSH #endif ... #ifndef _DEBUG_ #define PKG_USING_SYSWATCH #endif ``` 但rtconfig.h在 scons --target=mdk5 时又会被干掉,所以这个方法似乎行不通。又不太能够直接改代码吧,那样太麻烦了。 ##### 因此,请教各位大牛,我应该怎么做才正确呢? 还是说我一开始就不该这么弄😂? 才混迹论坛,没有积分😭
查看更多
张世争
2024-12-27
学以致用
- 你的调试与发布有什么不同?两个独立的工程还是一遍debug 一遍 release 的随时切换? - 建议在 `Kconfig` 与 构建 `SConscript` 上做版本处理 - 另外可以在 `rtconfig.py` 设置优化选项(debug 与 release)版本,直接使用 `scons` 编译
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
0
被浏览
299
关于作者
Ediffier
这家伙很懒,什么也没写!
提问
1
回答
0
被采纳
0
关注TA
发私信
相关问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-Thread离线包制作
2
RT-Thread 屏蔽在线软件包的方法
3
RT-Thread OS应用开发实战线上师资培训通知
4
【ci】【github】【bsp】RT-Thread仓库的CI自动编译测试
5
免费解锁MCU超能力!4月AIoT实战培训三城巡演
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
cubemx
ESP8266
WIZnet_W5500
UART
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
GD32
定时器
ADC
flashDB
编译报错
socket
中断
rt_mq_消息队列_msg_queue
keil_MDK
Debug
SFUD
msh
ulog
C++_cpp
at_device
本月问答贡献
聚散无由
5
个答案
4
次被采纳
RTT_逍遥
4
个答案
2
次被采纳
踩姑娘的小蘑菇
6
个答案
1
次被采纳
a1012112796
4
个答案
1
次被采纳
YZRD
3
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
7
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部