参数传递和条件执行在make中不起作用

参数传递和条件执行在make中不起作用

问题描述:

我附加了make文件的示例。参数传递和条件执行在make中不起作用

# SELECT TARGET OPERATING SYSTEM 
override OS = LINUX 
#OS = WINDOWS 

CC = gcc 
SRC_DIR = src 
INC_DIR = inc 
OBJ_DIR = obj 
CFLAGS = -c -Wall -I$(INC_DIR) 

# CONDITIONAL COMPILATION 
ifeq ($(OS), "WINDOWS") 
SERIAL = Winsrcfile 
CLEAR = cls 
endif 
ifeq ($(OS), "LINUX") 
SERIAL = Linsrcfile 
CLEAR = clear 
endif 

我试图做到这一点...

make OS=WINDOWS  // compile for windows 

make OS=LINUX  // compile for linux 

从Linux shell或Windows命令提示符,并希望默认是linux的,如果没有指定OS的同时执行'make'。但是,ifeq在两种情况下都会返回false,从而产生一个错误'没有制定目标的规则'。我读override directive & conditional syntax但似乎我还没有清楚的想法。我已经尝试了条件语法的每个备用语法。但在条件中得到错误'无效的语法。 Stop'

Make不区分引号。你应该做的是:

ifeq ($(OS),LINUX) 
# do stuff 
endif 

这里实际做了什么是参数展开,然后逐字比较。 $(OS)展开为变量的值,LINUX展开为LINUX。您的例子,例如需要make OS='"Linux"'为了工作

+0

可能覆盖在此没有必要,作为命令行参数通过makefile覆盖变量值 – madD7