[Gelöst] CMake Konfigurationsproblem Unterprojekte

bingo88

PCGH-Community-Veteran(in)
[Gelöst] CMake Konfigurationsproblem Unterprojekte

Ich versuche mich momentan erstamlig am cmake Buildsystem und bin jetzt auf ein Problem gestoßen. Und zwar sind einige Compilervariablen nicht gesetzt, beispielsweise CMAKE_COMPILER_IS_GNUCXX. Da dann meine Compilerflags nicht ordnungsgemäß gesetzt werden, bricht der Buildprozess mit Fehlermeldungen ab. Ich habe bis jetzt herausfinden können, dass dies mit meiner Projektstruktur zusammenhängt, daher habe ich mal ein kleine Minimal Working Example (MWE) zusammengeklempnert, das das Problem reproduziert.

Mein Projekt besteht aus mehreren Unterprojekten (hier: libmwe und demo), die durch die CMakeLists.txt im Wurzelverzeichnis eingebunden werden. Das funktioniert auch soweit, allerdings werden die Compilerflags nicht bei allen Projekten gesetzt. Wenn ich das MWE Projekt baue, werden die Flags nur bei libmwe gesetzt, beim demo Projekt liefert die Compilerabfrage einen leeren Wert, daher werden hier keine Flags gesetzt. Führe ich cmake allerdings erneut aus, werden auf einmal auch für das demo Projekt die richtigen Flags gesetzt.

Code:
if (CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "-Wall -std=c++11 -march=native")
endif()
Code:
cd build
rm -r *
cmake ..
make
# Fehlermeldung: -std=c++11 fehlt
cmake ..
make
# Flags sind nun auf einmal gesetzt?!
Wenn ich im Top Level Verzeichnis in der CMakeLists.txt das project(...) entferne, funktioniert es jedoch. Es werden allerdings dann auch mehr Tests durchgeführt, unter anderem auch auf den C Compiler, den ich ja gar nicht nutze. Das hat also irgendwie etwas damit zu tun, dass bei dem demo Projekt keine Compilertests durchgeführt werden bzw. die Variable nicht mehr gültig ist, da es ein neues Projekt ist? Wie muss ich denn cmake für eine derartige Projektstruktur konfigurieren?

Edit: Wenn ich das "project(mwe NONE)" in der Top Level CMakeLists.txt durch "project(mwe CXX)" ersetze, funktioniert es :ugly: Das Thema hat sich damit wohl erledigt.
 
Zuletzt bearbeitet:
Zurück