Yocto 条件调试标志添加
Yocto conditional debug flag addition
上下文
我目前正在为 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"
但随后在您的 if 条件中检查 DEV_MODE
,因此这种方法根本不起作用。
建议:全局设置-g
第一步可能是在 *.conf
中定义 TARGET_CPPFLAGS
,以便您的调试映像包含 -g
。
TARGET_CPPFLAGS += "-g"
这样就不需要在配方基础上添加它,而是可以在全球范围内完成。此外,当它添加到仅用于调试图像的 conf 中时,不需要任何 if/else.
我也会使用 TARGET_CPPFLAGS,因为它们随后用于 c 和 c++。但请记住,某些食谱可能会再次取消设置编译器标志。
上下文
我目前正在为 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"
但随后在您的 if 条件中检查 DEV_MODE
,因此这种方法根本不起作用。
建议:全局设置-g
第一步可能是在 *.conf
中定义 TARGET_CPPFLAGS
,以便您的调试映像包含 -g
。
TARGET_CPPFLAGS += "-g"
这样就不需要在配方基础上添加它,而是可以在全球范围内完成。此外,当它添加到仅用于调试图像的 conf 中时,不需要任何 if/else.
我也会使用 TARGET_CPPFLAGS,因为它们随后用于 c 和 c++。但请记住,某些食谱可能会再次取消设置编译器标志。