我正在开发一个使用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的项目中添加预处理器定义?
答案 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。