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

标签 c++ cmake yocto recipe openembedded

我正在开发一个使用 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 替换了所有 CFlags 而这不是我想要的(而且它破坏了编译!)

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

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

最佳答案

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

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

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

请注意,这只会为目标构建添加标志(即结果只会在目标上使用)。我看到您也在构建 native 变体,因此 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获取更多信息。

关于c++ - 如何在 Yocto 构建的 CMAKE projet 中添加预处理器定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42538230/

相关文章:

c++ - 如何通过套接字发送所有数据?

c++ - Cmake target_link_libraries 没有链接我的库

database - 我无法在我的 yocto 项目中安装 db berkeley

c++ - 如何覆盖继承的嵌套类中存在的虚方法

c++ - 跨线程扩展 MSVC 2005 的运算符 << 时出现性能问题

c++ - 将 CMakeLists QT4 更新为 QT5

c++ - 使用 CPP 读取 CSV 文件,使用 CMake 文件编译代码

c++ - 从内部系统调用生成调用栈

Yocto 的 ROOTFS_POSTPROCESS_COMMAND 不工作?

c++ - 智能感知不识别类