20130727工作中遇到的问题
问题背景:需要把产品定义头文件里面的产品定义取出来,然后按照产品定义分模块编译,shell里面做的工作主要是从product_type.h提出产品的定义,然后把产品定义export到环境变量,供Makefile使用,Makefile根据产品定义传各个模块的编译宏-DXXX_MOD_INC到gcc
CUR_DIR=`pwd`
PRODUCT_TYPEDEF_FILE=$CUR_DIR/foo/include/product_type.hPRODUCT_TYPE_DEF=SWITCH
get_product_type()
{
count=0
DEFINE="#define"
while read line
do
#tmp=${line:0:7} #bash 的写法,获取字串
#tmp=$line[0,7] #zsh 的写法,获取字串
#${#line} #bash, zsh 都支持 求字符串长度
tmp=$line[0,7]
if [[ $tmp = $DEFINE ]]; then
let "count = $count + 1" # 统计含"#define"的行数
if [ $count -eq 3 ]; then
PRODUCT_TYPE_DEF=$line[8,${#line}]
break
fi
fi
done < $PRODUCT_TYPEDEF_FILE
}
get_product_type
echo PRODUCT_TYPE_DEF: $PRODUCT_TYPE_DEF
# 添加到环境变量,以备Makefile取用
export PRODUCT_TYPE_DEF
问题在Makefile中惊现了!!!
在Makefile中用
ifeq (PRODUCT_FOO, $(PRODUCT_TYPE_DEF))
CFLAGS += -DMOD_INC_SNMP
endif
来对CFLAGS赋值,传入编译宏。但是CFLAGS始终不能赋值!! 而我把$(PRODUCT_TYPE_DEF) echo出来,是和PRODUCT_FOO一致的!!!实在找不到原因
后面采用了另一种方法就解决了,但是没有搞清楚原因,方法如下:
ifeq ($(findstring PRODUCT_FOO, $(PRODUCT_TYPE_DEF)), PRODUCT_FOO)
CFLAGS += -DMOD_INC_SNMP
endif
有人能告诉我为什么????!!!