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 的项目中添加预处理器定义?
我在我的配方文件中将此分配用于目标构建(也基于 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"),否则您的标志将被覆盖。请参阅此博客了解更多信息。