2016-04-14 10 views
2

Ich will Systemarchitektur automatisch zu erkennen, wenn ich mein Programm unter FreeBSD kompilieren und i2 möchten enthält für x64 und x32 aber nicht funktionieren, habe ich versucht, wie folgt aus:GNU Makefile, erkennen Architektur

ifeq ($(uname -a),i386) 
INCDIR += -I../../x32 
else 
INCDIR += -I../../x64 
endif 

Was ist hier falsch? Wenn ich amd64 kompiliere, arbeite mit Code unten. Wenn ich auf i388 kompilieren nicht funktionieren.

Wenn ich auf amd64 mit Code unter dem Makefile kompilieren, siehe x64 dir. Wenn ich auf i386 mit Code unter dem Makefile kompilieren, siehe x64 dir. Soo bassically, die sonst keinen Effekt haben?

+0

Versuchen 'uname -p' statt – kwarnke

+0

funktionieren nicht. das macht mich verrückt ... ich verstehe nicht warum. –

Antwort

2

In GNU make Syntax $() dereferenziert eine Variable. Sie möchten lieber einen Shell-Befehl:

uname_p := $(shell uname -p) # store the output of the command in a variable 

Und dann:

ifeq ($(uname_p),i386) 

Alternative Multi-Level-ifeqcomputed variable names verwenden. Hier ist ein funktionierendes Make-Datei ich auf meinem System:

uname_s := $(shell uname -s) 
$(info uname_s=$(uname_s)) 
uname_m := $(shell uname -m) 
$(info uname_m=$(uname_m)) 

# system specific variables, add more here  
INCDIR.Linux.x86_64 := -I../../x64 
INCDIR.Linux.i386 := -I../../x32 

INCDIR += $(INCDIR.$(uname_s).$(uname_m)) 
$(info INCDIR=$(INCDIR)) 

, die die folgende Ausgabe erzeugt:

$ make 
uname_s=Linux 
uname_m=x86_64 
INCDIR=-I../../x64 
+0

ifeq ($ (shell uname -p), i386) Versuchte so und nicht arbeiten. : (((((((( –

+0

@ Starrrks_2 add '$ (info $ (shell uname -p)) 'und poste seine Ausgabe. –

+0

Ich bekomme ungültige Variable name. Error here is print http://prntscr.com/asabll und hier ist mein System http://prntscr.com/asabv5 –

Verwandte Themen