2017-03-01 25 views
0

我正在開發一個使用CMake進行配置和生成的existant項目。 目標是ARM設備,所以我使用Yocto/OpenEmbedded構建了所有系統。如何在CMAKE projet build中添加預處理器定義作者:Yocto

我設法建立一個配方來建立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,這是不是我想要的(加上它打破了編譯!)

我只是想taht -DDEBUG加時調用編譯器! :-)

如何在Yocto配方的基於CMake的項目中添加預處理器定義?

回答

2

我使用這個任務的目標建立在我的配方文件(也可根據CMake的):

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

我不知道爲什麼CFLAGS傳播到CXXFLAGS,所以你也可以嘗試TARGET_CXXFLAGS變量在OpenEmbeedded中。見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瞭解更多信息。

+0

謝謝!有用! – AntoineC

+0

@AntoineC感謝您的信息。所以請接受答案。出於好奇,你設置了哪個變量? –

+0

我設置了TARGET_CFLAGS。設置TARGET_CXXFLAGS不會改變任何東西(至少對於FANN項目) – AntoineC