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

How to add preprocessor definition in CMAKE projet build by 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/"

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

我发现我可以使用

EXTRA_OECMAKE += "CXXFLAGS='-DDEBUG'"
EXTRA_OECMAKE = "set(CMAKE_CXX_FLAGS "-DDEBUG")"

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

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

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

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

# This flag is also propagated to CXXFLAGS
TARGET_CFLAGS += "-DSOME_FLAG"

我不确定为什么 CFLAGS 会传播到 CXXFLAGS,因此您也可以在 OpenEmbeedded 中尝试 TARGET_CXXFLAGS 变量。参见 Yocto mega manual

请注意,这只会为目标构建添加标志(即结果只会在目标上使用)。我看到您也在构建本机变体,因此 BUILD_CXXFLAGS 可能会有所帮助。 nativesdk 变体也有 BUILDSDK_CXXFLAGS (这不是你的情况)。 the manual in the CXXFLAGS variable description.

中清楚地描述了这些变量

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