Stellen Sie sich vor Ich kompiliere (eine statische) Bibliothek libfoo.a
, die eine Header-Datei foo.h
bereitstellt. Ich werde meine Anwendung APP
gegen libfoo.a
und #include <foo.h>
in meinem Quellcode verknüpfen. libfoo
wird mit CMake
als Build-System mit benutzerdefinierten Variablen, wie BUILD_WITH_OPTION_BAR
, die auf die Definitionen an den Compiler übergeben werden:Wie verwende ich (eine Konfigurationsdatei für) externe Header-Dateien, die kompilierungszeitabhängige #defines enthalten?
ADD_DEFINITIONS(BUILD_WITH_OPTION_BAR)
Innen foo.h
wir #ifdef
Erklärungen mit dieser Option finden:
#ifdef BUILD_WITH_OPTION_BAR
typedef long long int fooInt;
#else
typedef int fooInt;
#endif
Meine Frage ist: Wie soll ich in meinem APP
wissen, dass libfoo.a
mit oder ohne gebaut wurde t BUILD_WITH_OPTION_BAR
?
Mit anderen Worten: Wo und wann muss ich BUILD_WITH_OPTION_BAR
in meinem APP
definieren?
Mein Grundverständnis ist, dass die Bibliothek libfoo
sollte eine Art von config.h
Datei zur Verfügung stellen, die innerhalb foo.h
enthalten ist, aber, wie Sie ein optional#define BUILD_WITH_OPTION_BAR
dort bei der Kompilierung bekommen (von libfoo
)?
fand ich diese Frage im Zusammenhang: add_definitions vs. configure_file aber nicht nicht darüber diskutieren, wie dies tatsächlich erreicht wird.
Müssen Sie wirklich wissen, mit was die Bibliothek gebaut wurde? Warum nicht einfach den 'fooInt' Typedef verwenden? Wenn es wirklich darauf ankommt, welches benutzt wird, dann sollte es vielleicht nicht in der Bibliothek sein? – smac89
Ja, ich muss es wirklich wissen, denn wenn ich 'fooInt' verwende, was wird dann' typedef'? Es muss genauso sein wie in der verbundenen Bibliothek, oder? Und das funktioniert nur, wenn ich weiß, wo 'libfoo' erstellt wurde und' BUILD_WITH_OPTION_BAR' definiert ist (undefiniert). – Chris
@ruslo danke, dass du eine gute Antwort gefunden hast - ich könnte vorschlagen, dass du diese Frage/Überschrift redigierst, um es einfacher für andere in der Zukunft zu finden – Chris