2017-03-01 4 views
0

hinzufügen Ich arbeite an einem vorhandenen Projekt, die CMake verwenden, um zu konfigurieren und zu generieren. Das Ziel ist ein ARM-Gerät, also baue ich das ganze System mit Yocto/OpenEmbedded.Wie Preprozessor-Definition in CMAKE Projekt Build von Yocto

Ich schaffe es, ein Rezept zu bauen, um das Cmake-Projekt zu bauen. Es sieht wie folgt aus:

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/" 

Im Code gibt es „#ifdef DEBUG“, die Ich mag würde aktivieren. Also möchte ich DEBUG zu den C/C++ Flags hinzufügen.

fand ich, dass ich

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

Aber Stand ersetzen alle CFLAGS verwenden könnte, und das ist nicht das, was ich will (plus es brach Compilation!)

Ich möchte nur taht -DDEBUG wie hinzugefügt wird, wenn Aufruf des Compilers! :-)

Wie kann ich eine Präprozessordefinition in einem CMake-basierten Projekt in einem Yocto-Rezept hinzufügen?

Antwort

2

Ich verwende diese Aufgabe für ein Ziel zu bauen in meinen Rezeptdateien (auch auf Basis von cmake):

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

Ich bin nicht sicher, warum CFLAGS CXXFLAGS vermehrt werden, so dass Sie auch TARGET_CXXFLAGS versuchen können, Variable in OpenEmemberded. Siehe Yocto mega manual.

Bitte beachten Sie, dass dies Flags nur für einen Ziel-Build hinzufügen wird (d. H. Das Ergebnis wird nur auf dem Ziel verwendet). Ich sehe, dass Sie auch native Variante erstellen, also könnte BUILD_CXXFLAGS hilfreich sein. Es gibt auch BUILDSDK_CXXFLAGS für nativesdk Variante (das ist nicht Ihr Fall). Diese Variablen sind in the manual in the CXXFLAGS variable description klar beschrieben.

By the way, eine Sache, die das CMake verwendet ist: Wenn Sie set(CMAKE_CXX_FLAGS "-DDEBUG") in Ihrem CMakeLists.txt verwenden, Sie würden CMAKE_CXX_FLAGS auf der rechten Seite, das heißt set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG"), sonst Ihre Fahnen überschreiben wiederholen müssen. Weitere Informationen finden Sie unter this blog.

+0

Danke! Es klappt! – AntoineC

+0

@AntoineC Danke für die Informationen. Also bitte akzeptiere die Antwort. Und welche Variable haben Sie gerade aus Neugier gesetzt? –

+0

Ich setze TARGET_CFLAGS. Das Setzen von TARGET_CXXFLAGS ändert nichts (zumindest für das FANN-Projekt) – AntoineC