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"