如何在 Yocto 的 CMAKE projet 构建中添加预处理器定义

Ant*_*neC 2 c++ recipe cmake openembedded yocto

我正在开发一个使用 CMake 配置和生成的现有项目。目标是一个 ARM 设备,所以我用 Yocto/OpenEmbedded 构建了所有系统。

我设法构建了一个配方来构建 cmake 项目。它看起来像这样:

DESCRIPTION = "FANN LIB"

LICENSE = "CLOSED"

inherit cmake

SRCREV = "${AUTOREV}"

PV = "1.0"

SRC_URI = "git://github.com/libfann/fann.git;branch=master;protocol=git"

S = "${WORKDIR}/git"
BBCLASSEXTEND = "native" 

FILES_${PN} += "/usr/lib/cmake/"
Run Code Online (Sandbox Code Playgroud)

在代码中有我想激活的“#ifdef DEBUG”。所以我想将 DEBUG 添加到 C/C++ Flags 中。

我发现我可以使用

EXTRA_OECMAKE += "CXXFLAGS='-DDEBUG'"
EXTRA_OECMAKE = "set(CMAKE_CXX_FLAGS "-DDEBUG")"
Run Code Online (Sandbox Code Playgroud)

但是,booth 替换了所有的 CFlags,这不是我想要的(而且它破坏了编译!)

我只想在调用编译器时添加 -DDEBUG !:-)

如何在 Yocto 配方的基于 CMake 的项目中添加预处理器定义?

Tom*_*tny 7

我在我的配方文件中将此分配用于目标构建(也基于 cmake):

# This flag is also propagated to CXXFLAGS
TARGET_CFLAGS += "-DSOME_FLAG"
Run Code Online (Sandbox Code Playgroud)

我不确定为什么将 CFLAGS 传播到 CXXFLAGS,因此您也可以TARGET_CXXFLAGS在 OpenEmbeedded 中尝试变量。请参阅Yocto 大型手册

请注意,这只会为目标构建添加标志(即结果将仅用于目标)。我看到您也在构建本机变体,因此BUILD_CXXFLAGS可能会有所帮助。还有BUILDSDK_CXXFLAGS用于 nativesdk 变体(这不是你的情况)。这些变量在手册中的 CXXFLAGS 变量描述中有清楚的描述

顺便说一下,与 CMake 相关的一件事:如果您set(CMAKE_CXX_FLAGS "-DDEBUG")在 CMakeLists.txt 中使用,则需要在右侧重复 CMAKE_CXX_FLAGS,即set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG"),否则您的标志将被覆盖。请参阅此博客了解更多信息。