Forum: PC-Programmierung globale header file in cmakelists


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.
von lars (Gast)


Bewertung
0 lesenswert
nicht 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)


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

Oliver

von Mark B. (markbrandis)


Bewertung
0 lesenswert
nicht 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. (achs)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

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]
  • [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.