globale header file in cmakelists

Gast #6589115
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
#6589341
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.
#6589554
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.
#6590718
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren