首页 > 解决方案 > Yocto 条件调试标志添加

问题描述

语境

我目前正在为 raspberrypi 4 构建 yocto(不是很相关)。我想为两个不同的图像创建两个食谱:

  1. 具有最低限度运行速度的图像。主要用于生产阶段
  2. 带有许多额外工具和调试选项的图像

基本上核心思想很容易理清,我只创建了两个图像文件,第一个需要我的图像的基本配方,第二个需要第一个文件并需要一些额外的模块(如apt, valgrind,gdb等)。 ..)。

问题

现在问题来了:我的大部分食谱都是用 cmake 构建的。-g在为调试映像构建时,我想添加额外的标志(尤其是)。

最好的方法或最常见的方法是什么?有好的做法吗?

对我来说,这有点棘手,因为 bitbake 不支持该if声明。

我的解决方案

现在这是我找到的解决方案:在开发文件的图像配方中添加一个变量来定义调试模式:

DEBUG_MODE = "1"

然后在每个使用 cmake 编译模块的文件中,有条件地添加标志-g例如):

TARGET_CXXFLAGS += "${@'-g' if d.getVar('DEBUG_MODE') == '1' else ''}"

但是我不确定这如何应用于依赖项,我不确定这是否是最好的方法。看起来有很多重复的代码并且维护起来很乏味。有什么更容易管理的吗?

标签: cmakeyoctobitbake

解决方案


目前你设置

DEBUG_MODE = "1"

但是然后检查DEV_MODE您的 if 条件,因此这种方法根本不起作用。

建议:-g全局设置

一个步骤可能是TARGET_CPPFLAGS*.conf您的调试图像中定义包含-g.

TARGET_CPPFLAGS +=  "-g"

这样就不需要在配方基础上添加它,但可以在全球范围内完成。此外,当它添加到仅用于调试映像的 conf 中时,不需要任何 if/else。

我也会使用 TARGET_CPPFLAGS,因为它们随后用于 c 和 c++。但请注意,某些配方可能会再次取消设置编译器标志。


推荐阅读