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:
1 | target_link_libraries(stm32f4discovery PRIVATE CMSISDSP)
|
Weiters soll das CMSISDSP Target seine Header zur Verfügung stellen.
1 | target_include_directories(
|
2 | CMSISDSP
|
3 | PUBLIC
|
4 | $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/Core/Include/
|
5 | $<INSTALL_INTERFACE:include>
|
6 | PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/CMSIS_5/CMSIS/Core/Include/
|
7 | ${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:
1 | target_compile_options(stm32f4discovery
|
2 | PUBLIC ${ARCH}
|
3 | PRIVATE $<$<CONFIG:DEBUG>:-Og>
|
4 | ...)
|
Dann hab ich erwartet dass die "ARCH" flags auch im Library Build
übernommen werden? Dem ist aber nicht so.