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

时间:2017-03-01 17:28:49

标签: 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 ++标志中。

我发现我可以使用

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

但是摊位取代了所有的CFlags,这不是我想要的(加上它打破了汇编!)

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

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

1 个答案:

答案 0 :(得分:3)

我在配方文件中使用此作业进行目标构建(也基于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