Forum: PC-Programmierung globale header file in cmakelists


von lars (Gast)


Lesenswert?

Hallo,
wie muss ich in CMakeLists eine Headerfile einbinden, damit diese global 
gefunden werden kann, ohne sie noch zusätzlich in der .c datei 
anzugeben?
Es ist eine header (options.h), wo verschiedene sachen definiert sind, 
die überhall benutzt werden können.

hatte es versucht mit
1
set(GLOBAL_HEADER_FILE ../../../../options/options.h)
2
add_executable(TEST ${SRC_FILES} ${MODUL_SOURCE_FILES} ${GLOBAL_HEADER_FILE})
doch ein define, welches in options.h gesetzt ist wird nicht gefunden

von Oliver S. (oliverso)


Lesenswert?

C kennt keine globalen, sich automagisch selbst includenden Header. Da 
kann auch cmake nichts daran ändern.

Oliver

von Mark B. (markbrandis)


Lesenswert?

lars schrieb:
> eine Headerfile einbinden, damit diese global gefunden werden kann, ohne
> sie noch zusätzlich in der .c datei anzugeben?

Jede Quelltext-Datei inkludiert diejenigen Header, die sie braucht, um 
ordnungsgemäß übersetzt werden zu können. Mehrfaches Inkludieren wird 
durch "include guards" verhindert. Dann hast Du eine saubere Struktur.

von A. S. (Gast)


Lesenswert?

Warum willst Du das machen? Um die Zeile Code zu sparen? Das lohnt 
nicht. Um flexibel zu sein? Dann inkludier eine Dummy-Datei, die (in 
Abhängigkeit von einem #define) die richtige .h inkludiert.

von Rolf M. (rmagnus)


Lesenswert?

Dass es dafür ein eigenes CMake-Kommando gibt, glaube ich nicht. Aber 
man kann ein entsprechendes Compiler-Flag definieren.
1
add_compile_options(-include ${GLOBAL_HEADER_FILE})
Aber wie meine Vorredner schon schrieben, sollte man sowas eher 
vermeiden.

Ach ja:

Sowas sollte man auch vermeiden:

lars schrieb:
> set(GLOBAL_HEADER_FILE ../../../../options/options.h)

Du solltest die Pfade immer über die passenden CMake-Variablen angeben, 
also z.B. 
https://cmake.org/cmake/help/latest/variable/CMAKE_SOURCE_DIR.html . 
Wenn du dein build-Dir wo anders anlegst, findet der sonst den Header 
nicht mehr.

: Bearbeitet durch User
von Tom K. (ez81)


Lesenswert?

Rolf M. schrieb:
> Aber
> man kann ein entsprechendes Compiler-Flag definieren.

Das hat immer noch das Problem, dass die Abhängigkeit von options.h 
verlorengeht und Änderungen in options.h nicht zum neucompilieren 
führen.
Diese Abhängigkeit über Umwege in cmake reinzupfuschen ist überaus 
ekelhaft.

Meistens ist es zielführend, Werkzeuge so zu benutzen wie sie gedacht 
sind.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.