2016-04-14 113 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 –