2015-12-21 98 views
0

我附加了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'

回答

1

Make不區分引號。你應該做的是:

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

這裏實際做了什麼是參數展開,然後逐字比較。 $(OS)展開爲變量的值,LINUX展開爲LINUX。您的例子,例如需要make OS='"Linux"'爲了工作

+0

可能覆蓋在此沒有必要,作爲命令行參數通過makefile覆蓋變量值 – madD7

相關問題