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

时间:2015-12-21 11:45:39

标签: makefile gnu-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命令提示符,如果在执行' make'时未指定操作系统,则默认为linux。但ifeq在两种情况下都返回false,产生错误'没有规则来制作目标'。我读过override directive& conditional syntax但似乎我没有清楚地了解它。我已经尝试了条件语法的每种替代语法。但是在条件中得到错误的语法无效。停止'

1 个答案:

答案 0 :(得分:1)

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

$(OS)

这里实际做的是扩展参数然后按字面比较。 LINUX扩展为变量的值,LINUX扩展为make OS='"Linux"'。例如,您的示例需要{{1}}才能工作