Yocto 条件调试标志添加

Yocto conditional debug flag addition

上下文

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

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

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

问题

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

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

对我来说这有点棘手,因为 bitbake 不支持 if 语句。

我的解决方案

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

DEBUG_MODE = "1"

然后在每个用cmake编译模块的文件中(例如-g):

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

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

目前您设置

DEBUG_MODE = "1"

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

建议:全局设置-g

第一步可能是在 *.conf 中定义 TARGET_CPPFLAGS,以便您的调试映像包含 -g

TARGET_CPPFLAGS +=  "-g"

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

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