替换函数$$ find始终不返回任何内容

时间:2015-05-23 13:56:23

标签: qt qt-creator qmake

我有一个QT项目文件(.pro),并希望添加一些编译器特定的标志。

不是为每个版本的MSVC输入if win32-msvc2013|win32-msvc2010|...,我想我只能搜索子串“msvc”。

我做了一些研究并找到了find功能,这似乎是完美的工作。

为了测试这一点,我将message($$find($$QMAKESPEC, "*msvc*"))添加到项目文件中。但是,无论$$QMAKESPEC变量是否包含子字符串“msvc”,它始终打印为空白。我还尝试了message($$find($$QMAKESPEC, "msvc"))message($$find($$QMAKESPEC, msvc))message($$find($$QMAKESPEC, *msvc*))

我使用$$QMAKESPEC检查了message($$QMAKESPEC)的值,并打印了E:/Qt/5.4/msvc2013_64/mkspecs/win32-msvc2013

如何使用find函数检查QT项目文件中变量的子字符串?

更新

Frank Osterfeld建议在评论中使用msvc { ... },效果很好!但是我觉得这个问题仍然有用,因为$$find仍未按预期工作。

版本信息

Qt Creator 3.3.2(开源) 基于Qt 5.4.1(MSVC 2010,32位)

建于2015年3月4日00:09:05

来自修订版3af3fe7ad3

1 个答案:

答案 0 :(得分:1)

有一些qmake方法接受一个字符串,并且有一些方法采用变量。

$$find($$QMAKESPEC, "msvc")替换为$$find(QMAKESPEC, "msvc")

TESTME

message("Test me")
message($$QMAKESPEC)
# MSVC
message($$find($$QMAKESPEC, "msvc"))
message($$find(QMAKESPEC, "msvc"))
# linux
message($$find($$QMAKESPEC, "linux"))
message($$find(QMAKESPEC, "linux"))
# g++ does not work because it is a regular expression
message($$find($$QMAKESPEC, "g++"))
message($$find(QMAKESPEC, "g++"))
# g\+\+ does work
message($$find($$QMAKESPEC, "g\+\+"))
message($$find(QMAKESPEC, "g\+\+"))