参数传递和条件执行在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"'
为了工作
可能覆盖在此没有必要,作为命令行参数通过makefile覆盖变量值 – madD7