makefile if 使用

来源:互联网 发布:杭州软件外包公司 编辑:程序博客网 时间:2024/05/29 13:47

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 cccccLIBS2= -laaa#   @echo $(LIBS2)  else    @echo bbbbaLIBS2= -lbbb#   @echo $(LIBS2)  endif

3、测试 makefile

#是否相等#ifeq (ARG1, ARG2)#ifeq 'ARG1' 'ARG2'#ifeq "ARG1" "ARG2"#ifeq "ARG1" 'ARG2'#ifeq 'ARG1' "ARG2"#是否不相等#ifneqTV1=aaaTV2=aaaTV3=tv3LIBS=LIBS2=#这个ifeq else endif,在target 外部,关键字前边一定要有tab#这个ifeq else endif,在target 内部,关键字前边一定没有tab,否则当命令处理    ifeq ("aaa","bbb")#内容前可以有空格,如果是tab时,解析为命令#   +echo "test"  LIBS= -laaa    else#+echo "test"  LIBS= -lbbb    endifKVAL=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 cccccLIBS2= -laaa#   @echo $(LIBS2)  else    @echo bbbbaLIBS2= -lbbb#   @echo $(LIBS2)  endif  ifeq ("aaa","bbb")#   @echo cccccLIBS2= -laaa  else#   @echo bbbbLIBS2= -lbbbc  endif#   @echo "finall"
0 0