mikrocontroller.net

Forum: Compiler & IDEs cmake target_include_directories geht nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Vincent H. (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grüß euch

Ich versuche gerade cmake zu lernen und hab aus diesem Grund ein kleines 
Demo-Projekt für einen Cortex-M4 aufgesetzt. Da sich bei cmake ja alles 
um Dependencies und das Einbinden von Libs usw. dreht würd ich gerne 
CMSIS als Abhängigkeit einbaun.

Nun bin ich soweit dass ich in 2x verschiedenen CMakeLists 2x Targets 
definiert hab:
1x executeable "stm32f4discovery"
1x library "CMSISDSP"

Die Abhängigkeit der beiden Targets untereinander ist wie folgt 
definiert:
target_link_libraries(stm32f4discovery PRIVATE CMSISDSP)

Weiters soll das CMSISDSP Target seine Header zur Verfügung stellen.
target_include_directories(
  CMSISDSP
  PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/Core/Include/
    $<INSTALL_INTERFACE:include>
  PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/Core/Include/
          ${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/DSP/Include/)

Exakt der Teil funktioniert jedoch leider nicht. Versuche ich das 
Projekt zu compilieren, so beschwert sich make dass ein Header aus 
".../Core/Include" fehlt. Scheinbar versteh ich hier irgendwas nicht, 
ich dachte dass man via BUILD_INTERFACE den echten physischen Pfad zu 
den Header angibt und diese dann via INSTALL_INTERFACE in dem 
angegebenen Ordner "eingeklinkt" werden.

Das stm32f4discovery Target sollte also die Header in "../Core/Include" 
nutzen können?

Die CMAKE_CURRENT_SOURCE_DIR Variable hab ich bereits überprüft, die 
sollte eigentlich an die richtige Stelle zeigen? Das Compilieren des 
CMSISDSP Targets allein funktioniert auch.

Was ich abgesehn davon auch nicht verstehe ist wieso ich 
"../Core/Include" 2x einbinden muss? Lasse ich den Pfad in der PRIVATE 
Sektion weg, dann funktioniert auch der CMSISDSP Build nicht mehr...?


/edit
Achja und noch eine Frage hab ich. Sollten Compiler Einstellungen nicht 
genauso transient sein wie alles andere? Wenn ich etwa folgendes mach:
target_compile_options(stm32f4discovery
                       PUBLIC  ${ARCH}
                       PRIVATE $<$<CONFIG:DEBUG>:-Og>
                               ...)

Dann hab ich erwartet dass die "ARCH" flags auch im Library Build 
übernommen werden? Dem ist aber nicht so.

: Bearbeitet durch User
Autor: Vincent H. (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geh schleich dich oida...
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/Core/Include/

-->
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/Core/Include/>


Vielleicht sollte ma in diesen Cluster-Fuck von einem Meta-Buildsystem 
auch mal einen Syntaxcheck einbaun?

Und meine 2.Frage hab ich nun auch kapiert. Ja target_compile_options 
ist genauso "transient" wie alles andere auch, aber halt nur von unten 
nach oben und nicht von oben nach unten...

Das heißt dass globale Compiler Einstellungen via add_compile_options 
angelegt werden müssen weils anders nicht geht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.