【问题标题】:Replace function $$find always returns nothing替换函数 $$find 总是不返回任何内容
【发布时间】:2015-05-24 22:49:52
【问题描述】:

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

我认为我可以只搜索子字符串“msvc”,而不是为每个版本的 MSVC 输入 if win32-msvc2013|win32-msvc2010|...

我做了一些研究,发现了 find 函数,这似乎非常适合这项工作。

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

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

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

更新

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


版本信息

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

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

从修订版 3af3fe7ad3

【问题讨论】:

  • 您是否在 .pro 文件中尝试过 msvc: something
  • @FrankOsterfeld 啊,很好用,谢谢 :) 虽然它没有解释为什么 $$find 不起作用
  • 您需要传递函数名称,而不是其内容(即 QMAKESPEC,而不是 $$QMAKESPEC)。不过,它可能不会达到您的预期。请参阅doc.qt.io/qt-5/qmake-function-reference.html 还要注意有 contains()。
  • @FrankOsterfeld 啊,成功了,谢谢。如果您将其写在答案中,我会接受
  • 如果你关心平台而不是编译器,或者使用“win32: something”而不是 msvc。

标签: qt qt-creator qmake


【解决方案1】:

有接受字符串的 qmake 方法,也有接受变量的方法。

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

测试我

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\+\+"))

【讨论】:

    猜你喜欢
    • 2020-01-26
    • 2018-10-02
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2017-06-23
    • 2016-08-10
    相关资源
    最近更新 更多