2011-04-28 57 views
3
MAC_BOOST_PATH = -L/opt/local/lib 
LINUX_BOOST_PATH = -L/usr/lib/ 
DEFAULT_PATH = -L/usr/local/lib 
BOOST_PATH = $(DEFAULT_PATH) 

ifeq ($(UNAME), Darwin) 
BOOST_PATH = MAC_BOOST_PATH 
@echo Compiling for Mac OS X 
@echo 
endif 
ifeq ($(UNAME), Linux) 
BOOST_PATH = LINUX_BOOST_PATH 
@echo Compiling for Linux 
@echo 
endif 

回声的不打印,和BOOST_PATH没有改变,我不认为......所以...我不知道我是什么,在做什么错在这里... = \Makefile:问题获取ifstatement工作=(

回答

3

你不能把命令我独立于目标的Makefile。您需要引入一个显示操作系统的目标。另外,你缺少'$()'。使用例如

UNAME=$(shell uname) 
MAC_BOOST_PATH = -L/opt/local/lib 
LINUX_BOOST_PATH = -L/usr/lib/ 
DEFAULT_PATH = -L/usr/local/lib 
BOOST_PATH = $(DEFAULT_PATH) 

ifeq ($(UNAME),Darwin) 
BOOST_PATH=$(MAC_BOOST_PATH) 
endif 
ifeq ($(UNAME),Linux) 
BOOST_PATH=$(LINUX_BOOST_PATH) 
endif 

all: showos 

showos: 
    @echo compiling for $(UNAME) 
3

你不定义任何地方UNAME变量你可能想是这样的:

UNAME = $(shell uname) 
0

我认为你需要删除@符号来得到的回声出现

+2

不需要那个。 '@'只是抑制命令本身的回显。 – 2011-04-28 15:42:00

0

正如Erik所指出的,Make不会执行独立于目标的命令。但它可以评估没有目标的功能:

UNAME = whatever 

ifeq ($(UNAME), Darwin) 
BOOST_PATH = MAC_BOOST_PATH 
$(info Compiling for Mac OS X) 
$(info) # note the space 
endif 
ifeq ($(UNAME), Linux) 
BOOST_PATH = LINUX_BOOST_PATH 
$(info Compiling for Linux) 
$(info) 
endif