Präprozessorkonstanten im makefile definieren und im sourcecode verwenden

S

supersucker

Foren Gott
Hallo zusammen,

gibt es eine Möglickeit im Makefile Präprozessorkonstanten zu definieren und im Source-Code selbst gültig zu machen?

Eine bessere Formulierung fällt mir gerade nicht ein, deshalb mal ein Beispiel:

Im Makefile:

Code:
# os-version abfragen
OS_VERSION=...
# 
ifeq (Windows,OS_Version)
WINBUILD_VC=1
CFLAGS+=$(DEBUG) -O2 -Wno-sign-compare -Wimplicit  [B][COLOR="Red"]-WINBUILD_VC[/COLOR][/B] -DWINBUILD -D_GNU_SOURCE 
endif

Dies soll im source-code folgendermaßen genutzt werden:

Code:
// if we are on linux, include poll.h and socket.h
#ifndef WINBUILD_VC

#include <sys/poll.h>
#include <sys/socket.h>
#endif

Ich habs schon probiert, so wie ich gepostet habe funktioniert das nicht, deshalb die Frage:

Funktioniert das prinzipiell nicht oder hab ich was nicht beachtet?
 
Da Du anscheinend nur das Betriebssystem in Erfahrung bringen möchtst, kannst Du auch einfach prüfen, auf welchem OS Dein Programm kompiliert wird:

Code:
#ifdef WIN32
blablabla
#endif

Mfg, Lord Kefir
 
Mit '-D' uebergibst Du ueber den Compiler Makros an den Praeprozessor:
Code:
# os-version abfragen
OS_VERSION=...
# 
ifeq (Windows,OS_Version)
CFLAGS+=$(DEBUG) -O2 -Wno-sign-compare -Wimplicit  [B][COLOR="Green"]-D[/COLOR][/B]WINBUILD_VC=1 -DWINBUILD -D_GNU_SOURCE 
endif
Vorher im Makefile die Variable auf 1 zu setzen (hier geloescht) hat nicht den gewuenschten Effekt.
 
Nein, das ist leider nicht alles.......

Also jetzt erzähle ich mal die ganze Geschichte:

- Ich hab einen Riesenhaufen an C-Sourcecode der extern gecodet wurde.
- Die ganze Applikation soll nun inhouse weiterentwickelt werden.
- Die bisherigen Entwickler haben mir zugesichert, das der source-code mit dem mitgelieferten makefile sowohl unter Linux als auch unter Windows kompilierbar sei.

Das stimmt aber so nicht:

- Er kompiliert unter Linux
- und unter Windows, aber NUR im Visual Studio von MS, welches - hach, was für ein Zufall - die Entwicklungsumgebung der Entwickler war.

Der Grund warum es ausserhalb des VS nicht kompiliert:

Im Sourcecode wird ständig mit

Code:
#ifndef WINBUILD_VC

#include <sys/poll.h>
#include <sys/socket.h>
#endif

abgefragt ob wir auf einem Win- oder einem Linux-System sind.

Dieses WINBUILD_VC wird aber nirgends gesetzt, demzufolge gibts haufenweise Compile-Fehler weil er dann immer in diesen Zweig springt und versucht z.b. die socket.h zu laden, die ist aber für Linux, und wird demzufolge nicht gefunden.

Der Grund warum es unter Visual Studio kompilierbar ist:

Weil in der Projektdatei von Visual Studio genau dieses WINBUILD_VC gesetzt ist! (Bitte keine Bemerkung wegen der Unverschämtheit etwas auszuliefern was unter Windows nur in einer bestimmten IDE ablauffähig ist)

So,

nun soll dieses Ding natürlich ohne VS unter Windows kompilierbar sein, deshalb dachte ich mir das es am einfachsten und unkompliziertesten sein müsste im Makefile - nämlich genau in der Sektion in der das OS festgestellt wird - diese Konstante setze...

Deshalb die Frage:

Geht das überhaupt? Wenn ja, wie?

EDIT:

Hab gerade erst deinen Post gesehen, vielen Dank Rikola!
 
Zuletzt bearbeitet:

Ähnliche Themen

Composite oder Svideo Ausgang mit Geforce

kompilier problem

Fehler beim compiliren vom Nvidia Treiber

emerge-Abruch bei xorg/x11

nForce 410 auf Debian AMD64

Zurück
Oben