QMake语法:+=与*=(加号与星号)的区别
QMake中
LIBS *= -lz和LIBS += -lz的区别 这俩语句看着只差个星号,但在QMake里的实际行为可是有明显差异的,给你拆解明白:
LIBS += -lz:无脑追加,允许重复
这个操作就是单纯把-lz(也就是zlib库)直接追加到LIBS变量的末尾,完全不管这个库之前有没有被添加过。举个例子,如果你的.pro文件里已经写过一次LIBS += -lz,再写一遍的话,最终LIBS里会出现两次-lz。虽然大多数链接器会自动忽略重复的库引用,但偶尔也会因为重复条目导致一些奇怪的顺序问题,而且代码看起来也不够干净。LIBS *= -lz:智能追加,自动去重
带星号的这个是QMake提供的“智能添加”语法,它会先检查LIBS变量里已经有没有-lz这个条目。如果已经存在,就啥也不做;只有当这个库还没被加入的时候,才会把它追加到末尾。这在处理多模块项目或者依赖复杂的库时特别实用——比如你在多个子项目的.pro文件里都可能引用zlib,用*=就完全不用担心重复添加的问题,QMake会帮你自动去重。
举个直观的例子:
假设初始LIBS的值是-lm:
- 执行
LIBS += -lz后,LIBS变成-lm -lz;再执行一次LIBS += -lz,就变成-lm -lz -lz。 - 执行
LIBS *= -lz后,LIBS变成-lm -lz;再执行一次LIBS *= -lz,LIBS还是-lm -lz,不会出现重复的-lz。
内容的提问来源于stack exchange,提问作者autonomy
相关产品推荐
相关产品推荐

