makefile if 使用
阿新 • • 發佈:2019-02-11
1、在目標外使用if
#這個ifeq else endif,在target 外部,關鍵字前邊一定要有tab
ifeq ("aaa","bbb")
#內容前可以有空格,如果是tab時,解析為命令
#變數前可以多個空格
LIBS= -laaa
else
#+echo "test"
LIBS= -lbbb
endif
2、在目標內使用if
a、情形一:shell 方式
#make預處理時,所有以$開頭的,它都不會放過。要想引用Shell自己的變數,應該以$$開頭。另外要注意,Shell自己的變數是不需要括號
#make把每一行Shell腳本當作一個獨立的單元,它們在單獨的程序中執行。裡邊定義的變數,只能在區域性使用
@if [ "debug" = "debug" ]; \
then \
TV3=test3_yes;\
echo $$TV3; \
echo $(TV3); \
else \
TV3=test3_no;\
fi
b、情形二:makefile方式
#這個ifeq else endif,在target 內部,關鍵字前邊一定沒有tab,否則當命令處理。可以有多個空格
#在內部時,endif後邊不能執行任務語句
ifeq ("aaa","bbb")
@echo ccccc
LIBS2= -laaa
# @echo $(LIBS2)
else
@echo bbbba
LIBS2= -lbbb
# @echo $(LIBS2)
endif
3、測試 makefile
#是否相等
#ifeq (ARG1, ARG2)
#ifeq 'ARG1' 'ARG2'
#ifeq "ARG1" "ARG2"
#ifeq "ARG1" 'ARG2'
#ifeq 'ARG1' "ARG2"
#是否不相等
#ifneq
TV1=aaa
TV2=aaa
TV3=tv3
LIBS=
LIBS2=
#這個ifeq else endif,在target 外部,關鍵字前邊一定要有tab
#這個ifeq else endif,在target 內部,關鍵字前邊一定沒有tab,否則當命令處理
ifeq ("aaa","bbb")
#內容前可以有空格,如果是tab時,解析為命令
# +echo "test"
LIBS= -laaa
else
#+echo "test"
LIBS= -lbbb
endif
KVAL=start
#makefile變數只能在target外部定義和修改
all:
#如果不新增@,結果也出出,但是語句本身也會打印出來
echo $(KVAL)
@echo $(LIBS)
#Shell指令碼在target裡才有效,其它地方都被忽略掉了。target 外可以用$(shell 語句)方式
#make把每一行Shell腳本當作一個獨立的單元,它們在單獨的程序中執行。裡邊定義的變數,只能在區域性使用
@if [ "debug" = "debug" ]; then echo "build debug"; else echo "build release"; fi
#make預處理時,所有以$開頭的,它都不會放過。要想引用Shell自己的變數,應該以$$開頭。另外要注意,Shell自己的變數是不需要括號
#在Makefile中執行shell命令,一行建立一個程序來執行。這也是為什麼很多Makefile中有很多行的末尾都是“; \”,以此來保證程式碼是一行而不是多行,這樣Makefile可以在一個程序中執行
@for i in 1 2 3; \
do \
echo "building " $$i; \
done
@echo "finall"
#make把每一行Shell腳本當作一個獨立的單元,它們在單獨的程序中執行。裡邊定義的變數,只能在區域性使用
@if [ "debug" = "debug" ]; \
then \
TV3=test3_yes;\
echo $$TV3; \
echo $(TV3); \
else \
TV3=test3_no;\
fi
@echo $(TV3)
#這個ifeq else endif,在target 外部,關鍵字前邊一定要有tab
#這個ifeq else endif,在target 內部,關鍵字前邊一定沒有tab,否則當命令處理
#在內部時,endif後邊不能執行任務語句
ifeq ("aaa","bbb")
@echo ccccc
LIBS2= -laaa
# @echo $(LIBS2)
else
@echo bbbba
LIBS2= -lbbb
# @echo $(LIBS2)
endif
ifeq ("aaa","bbb")
# @echo ccccc
LIBS2= -laaa
else
# @echo bbbb
LIBS2= -lbbbc
endif
# @echo "finall"