我有一个使用QMake的C ++项目。我试图基于运行Linux发行版的简单测试来设置一些编译器选项,但是该测试未通过。我的qmake文件包含:
OSDISTRO = $$(cat /proc/version)
contains(OSDISTRO, "Ubuntu"): {
message(Found ubuntu)
}
我从命令行测试了正则表达式,它起作用了!
cat /proc/version | pcregrep "Ubuntu"
Linux version 4.18.0-20-generic (buildd@lcy01-amd64-020) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #21~18.04.1-Ubuntu SMP Wed May 8 08:43:37 UTC 2019
qmake中的正则表达式语法是否有特殊之处?有什么原因不起作用?
答案 0 :(得分:0)
对于 RegEx:
这对我有用:
OSDISTRO = $$system(cat /proc/version)
contains(OSDISTRO, .*Ubuntu.*){
message("Found Ubuntu")
}
注意: 匹配区分大小写。
例如,您可以使用.*[uU]buntu.*
来匹配ubuntu
和Ubuntu
。
说明 为什么您的解决方案不起作用:
QMake
函数contains
与 列表 值一起使用。
因此,您的解决方案执行将是这样的:
1)第一条指令OSDISTRO = $$(cat /proc/version)
:
QMake
将执行$$system(cat /proc/version)
。
然后将结果拆分(以空格作为分隔符)为值列表。 OSDISTRO
将包含此列表。
假设结果与您一样。第一条指令的结果如下:
OSDISTRO = "Linux" "version" "4.18.0-20-generic"...
。
2)第二条指令contains(OSDISTRO, "Ubuntu") : message(Found ubuntu)
:
QMake
将搜索变量OSDISTRO
是否包含值Ubuntu
,如果成功,则显示消息Found ubuntu
。在您的情况下,QMake
将永远找不到Ubuntu
,导致包含它的值像这样(Ubuntu 7.3.0-16ubuntu3)
,而QMake
仅搜索值{{1} }。
希望它对您有帮助。