Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
mdk5 + env环境下,怎么实现条件编译?debug release模式
发布于 2024-12-26 01:41:28 浏览:29
订阅该版
[tocm] 我使用keil5 + env, rtthread4.1.1 构建固件。 *(新手小白,前天才第一次接触env环境,还不太熟悉,rtthread studio试用了一下还不太习惯)。* 我将 template.uvprojx 默认的名称为rthread的Target改成了两个debug + release,如下图. ![Snipaste_2024-12-26_01-13-17.jpg](https://oss-club.rt-thread.org/uploads/20241226/30a902471f4aa12d8c39d09beed841e4.jpg) #### 目的是调试阶段使用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 时又会被干掉,所以这个方法似乎行不通。又不太能够直接改代码吧,那样太麻烦了。 ##### 因此,请教各位大牛,我应该怎么做才正确呢? 还是说我一开始就不该这么弄😂? 才混迹论坛,没有积分😭
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
29
关于作者
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
profinet从站主线error open adapt
2
2024 RT-Thread睿赛德开发者大会共探商业共赢的开源生态
3
rt-thread 小内存算法源码分析
4
env中添加lvgl软件包后,keil编译包--c99错误
5
【NXP-MCXA153】 定时器驱动移植
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
Debug
中断
编译报错
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
20
个答案
3
次被采纳
红枫
8
个答案
2
次被采纳
踩姑娘的小蘑菇
7
个答案
2
次被采纳
三世执戟
7
个答案
1
次被采纳
张世争
6
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
12
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部