我在项目中使用了大量的define,通过不能的宏定义得到不同的性能参数和软件功能,从而定义出新的产品。
后来,我将所有的define从我的config.h文件中搬迁到我的qmake工程里。定义不同的Target, 从而include不同的Target.pri文件。
Target.pri中使用了大量的DEFINES+=SUPPORT_FEATURE 或者 DEFINES+=MAXNUM=100等。
然而问题来了,越来越多的DEFINES将配置文件越来越复杂,需要使用qmake做一些依赖关系校验操作。
例如,只有支持TOUCH功能的产品才需要支持TSLIB可以这么验证
contains(DEFINES, TOUCH){
!contains(DEFINES,TSLIB){
error(ERROR)
}
}
else{
contains(DEFINES,TSLIB){
error(ERROR)
}
}
还有一种是支持TOUCH功能的产品,通信录容量为10000,若不支持,则VOLUME不能有定义
!contains(DEFINES,TOUCH){
contains(DEFINES,VOLUME.*){
error()
}
}
从上面的字符匹配来看, qmake使用的perl语法,可能内部使用了perl将配置文件生成Makefile 文件吧
推荐文章:
http://my.oschina.net/MichaelBJFU/blog/81445
http://www.qtcentre.org/wiki/index.php?title=Undocumented_qmake