cmake - Yocto 条件调试标志添加
问题描述
语境
我目前正在为 raspberrypi 4 构建 yocto(不是很相关)。我想为两个不同的图像创建两个食谱:
- 具有最低限度运行速度的图像。主要用于生产阶段
- 带有许多额外工具和调试选项的图像
基本上核心思想很容易理清,我只创建了两个图像文件,第一个需要我的图像的基本配方,第二个需要第一个文件并需要一些额外的模块(如apt
, valgrind
,gdb
等)。 ..)。
问题
现在问题来了:我的大部分食谱都是用 cmake 构建的。-g
在为调试映像构建时,我想添加额外的标志(尤其是)。
最好的方法或最常见的方法是什么?有好的做法吗?
对我来说,这有点棘手,因为 bitbake 不支持该if
声明。
我的解决方案
现在这是我找到的解决方案:在开发文件的图像配方中添加一个变量来定义调试模式:
DEBUG_MODE = "1"
然后在每个使用 cmake 编译模块的文件中,有条件地添加标志(-g
例如):
TARGET_CXXFLAGS += "${@'-g' if d.getVar('DEBUG_MODE') == '1' else ''}"
但是我不确定这如何应用于依赖项,我不确定这是否是最好的方法。看起来有很多重复的代码并且维护起来很乏味。有什么更容易管理的吗?
解决方案
目前你设置
DEBUG_MODE = "1"
但是然后检查DEV_MODE
您的 if 条件,因此这种方法根本不起作用。
建议:-g
全局设置
一个步骤可能是TARGET_CPPFLAGS
在*.conf
您的调试图像中定义包含-g
.
TARGET_CPPFLAGS += "-g"
这样就不需要在配方基础上添加它,但可以在全球范围内完成。此外,当它添加到仅用于调试映像的 conf 中时,不需要任何 if/else。
我也会使用 TARGET_CPPFLAGS,因为它们随后用于 c 和 c++。但请注意,某些配方可能会再次取消设置编译器标志。
推荐阅读
- reactjs - 目前我正在研究 React(前端部分),我有书签文件夹列表,用户可以从上面的列表中选择一个或多个书签文件
- reactjs - react-redux 状态始终相同且不链接
- ios - Xcode po不在调试区域打印输出
- python - PM2.js 在 Virtualenv/Anaconda 环境中运行 Gunicorn/Flask 应用程序
- reactjs - 如何在 Next.js 应用程序的 Vercel 部署中修复此 ts-toolbelt TypeScript TypeError?
- cluster-analysis - 贝叶斯网络分析中的聚类 (bnlearn)
- cockroachdb - Alter Rename to with table 后,我们无法使用旧名称创建表
- java - 如何每次从迭代器迭代 10 个元素
大小 100 - python - 移除注释并在 json 对象之间添加逗号
- c++ - 将枚举映射到模板类型