make: Makro definieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
XCooperation
Beiträge: 78
Registriert: 01.06.2005 15:05:37
Wohnort: Schrobenhausen
Kontaktdaten:

make: Makro definieren

Beitrag von XCooperation » 09.02.2006 18:07:43

Hallo,
ich habe hier folgendes Problem:
Ich entwickle gerade ein Programm für Windows und Linux.
Damit ich ohne große Probleme das Programm auf beiden Systemen kopilieren kann habe ich im Quellcode folgendes gemacht:

Code: Alles auswählen

#if defined(_WIN32)
    //Windows-Teil
#elif defined(_LINUX)
    //Linux-Teil
#endif
Wenn ich jetzt das Programm kompillieren will, klappt das super, wenn ich den Befehl direkt eingebe:
g++ -c netpipe.cpp -o netpipe.o -D _LINUX
Mach ich das jetzt aber in einem Makefile:

Code: Alles auswählen

BIN=netpipe
OBJ=main.o netpipe.o

$(BIN): $(OBJ)
        $(CXX) $(OBJ) -o "netpipe.exe" $(LIBS)

main.o: main.cpp
        $(CXX) -c main.cpp -o main.o -D _LINUX $(CXXFLAGS)

netpipe.o: netpipe.cpp
        $(CXX) -c netpipe.cpp -o netpipe.o -D _LINUX $(CXXFLAGS)
hauts nich mehr hin, er definiert das Makro _LINUX nicht :(
Was muss ich machen, damit es funktioniert ?
Never trust a running system!
http://www.xenesis.net

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 09.02.2006 18:41:17

Ich habe letztens einen g++ bug im Debian BTS gelesen, der auch sagte, dass das _linux Makro nicht mehr definiert wird.

Es wurde aber empfohlen einfach _linux_ oder __linux__ zu verwenden, was noch zu funktionieren scheint.

-Flo

Benutzeravatar
XCooperation
Beiträge: 78
Registriert: 01.06.2005 15:05:37
Wohnort: Schrobenhausen
Kontaktdaten:

Beitrag von XCooperation » 09.02.2006 19:11:11

Nein, funktioniert leider nicht...
Never trust a running system!
http://www.xenesis.net

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 09.02.2006 19:57:17

wird automatisch definiert, ist aber auch casesensitiv :

Code: Alles auswählen

root@gms1:~/tmp# touch x.c
root@gms1:~/tmp# gcc-4.0 -E -dM x.c | grep -i linux
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1
root@gms1:~/tmp# gcc-2.95 -E -dM x.c | grep -i linux
#define __linux__ 1
#define linux 1
#define __linux 1
root@gms1:~/tmp# gcc -E -dM x.c -D __LINUX | grep -i linux
#define __linux 1
#define __LINUX 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1
Gruß
gms

Antworten