1. 程式人生 > >makefile if 使用

makefile if 使用

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"