2016-04-14 80 views
2

我想自動檢測系統架構,當我在FreeBSD下編譯我的計劃,我想2包括x64和X32,但不工作,我想是這樣的:GNU的Makefile,檢測架構

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

什麼這裏錯了嗎? 當我在amd64上編譯使用下面的代碼。 當我在i388編譯不工作。

當我在amd64上編譯makefile下面的代碼時,請參閱x64 dir。 當我在i386上使用低於makefile的代碼進行編譯時,請參閱x64 dir。 Soo bassicaly,否則沒有任何影響?

+0

嘗試'UNAME -p'代替 – kwarnke

+0

不要工作。這讓我發瘋......我無法理解爲什麼。 –

回答

2

在GNU make語法中$()取消引用一個變量。您更希望一個shell命令:

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

然後:

ifeq ($(uname_p),i386) 

替代使用computed variable names多層次ifeq。下面是我在我的系統上使用的工作生成文件:

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)) 

將會產生以下的輸出:

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

ifeq($(shell uname -p),i386)嘗試像這樣並且沒有工作。 :(((((((((((( –

+0

@ Starrrks_2 add'$(info $(shell uname -p))'併發布其輸出 –

+0

我得到非法的變量名稱。 http://prntscr.com/asabll這裏是我的系統http://prntscr.com/asabv5 –