makefile if 使用

https://blog.csdn.net/liuzhuchen/article/details/51776820

1、在目标外使用if

#这个ifeq else endif,在target 外部,关键字前边一定要有tab
    ifeq ("aaa","bbb")
#内容前可以有空格,如果是tab时,解析为命令
#变量前可以多个空格
  LIBS= -laaa
    else
#+echo "test"
  LIBS= -lbbb
    endif

    1
    2
    3
    4
    5
    6
    7
    8
    9

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

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"


   

猜你喜欢

转载自blog.csdn.net/u014357799/article/details/89799857
今日推荐