一、问题描述:
在makefile中想要借用ifeq()函数,来实现条件编译:即ifeq()函数判断不同场景,给源码传递不同的宏定义,从而控制编译不同的源码。
出错的makefile相应部分如下:
#编译版本(场景)选择
VERSION_CONTROL := 1 #1:场景1,2:场景2
ifeq (1, ${VERSION_CONTROL})
CFLAGS += -DVERSION_ONE
else
CFLAGS += -DVERSION_TWO
endif
明明我上面设置的是场景1,想要添加的是宏定义-DVERSION_ONE,但是始终都是进入下面else的-DVERSION_TWO。
二、问题解决
反复尝试和测试,最后终于发现问题的点。
原来上述makefile脚本中,把配置项“VERSION_CONTROL:=1”后面的空格也当成了值的一部分。。。所以上述代码的该处配置项,值始终等于“1 ”加上个“空格”(虽然后来想了想,makefile的脚本语言,连个变量类型都没有,而我变量值确实是个1+空格,把空格当成个字符好像也不为过。。。但是这个错误依然让我很无语)
总结:把上述配置项“=1”后面的空格删除,问题解决。
为了避免上述问题,再写makefile时,还是把注释单独写一行吧。
改正后:
#编译版本(场景)选择,1:场景1,2:场景2
VERSION_CONTROL := 1
ifeq (1, ${VERSION_CONTROL})
CFLAGS += -DVERSION_ONE
else
CFLAGS += -DVERSION_TWO
endif
三、附赠makefile中关于tab、空格使用需要注意的地方:(tab对齐,不用或少用空格)