我正在开发一个使用 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/