【问题标题】:How to pass a QMAKE variable from the command line?如何从命令行传递 QMAKE 变量?
【发布时间】:2017-08-25 14:51:45
【问题描述】:

我正在尝试从 Linux 终端交叉编译一堆 Qt。当我运行 qmake 时,它​​以必须定义 CROSS_COMPILE 变量的方式在我的上下文中应用 mkspecs qmake.conf。例如,有一个关键的 conf 行如下所示:

QMAKE_CXX               = $${CROSS_COMPILE}g++

Qmake 返回一个错误,但它清楚地表明 $${CROSS_COMPILE} 没有得到解决。它只是使用“g++”而不是应该存在的整个值。

我尝试调用 qmake 并从 bash 脚本中定义变量,如下所示:

qmake qt.pro "CROSS_COMPILE=${CROSS_COMPILE}"

像这样:

qmake qt.pro -- "CROSS_COMPILE=${CROSS_COMPILE}"

还有其他一些类似的尝试。我还尝试过对该命令中的值进行硬编码,以防与它有关。我也尝试将其定义为环境变量(以防万一)...

没有任何作用。然而,我已经看到很多例子表明这种语法似乎是有效的。做错了什么?会不会有字符转义并发症?

【问题讨论】:

  • .qmake.conf 文件的变量部分吗?这些参数仅适用于 pro 文件,而不适用于 qmake 配置。您可能需要通过 --spec 参数传递正确的 qmake 规范。检查mkspecs 目录以找到正确的目录,或创建您自己的目录。这可能有效。
  • 谢谢,菲利克斯。我来看看 --spec 参数。

标签: linux qt cross-compiling qmake


【解决方案1】:

您的问题是 shell 已经将字符串中的 ${} 解释为变量替换的一种形式。 由于您没有在 shell 中定义变量 CROSS_COMPILE,它没有任何值,qmake 得到的实际上是引号“qt.pro”和“CROSS_COMPILE =”之间的 2 个参数,这意味着您实际上已经让 qmake 将 CROSS_COMPILE 设置为空价值。 你应该尝试的是:

qmake qt.pro "CROSS_COMPILE=\${CROSS_COMPILE}"

注意美元符号前的反斜杠,将其转义以防止它对 shell 具有特殊含义,并使其能够按字面意思传递给 qmake。

Stackoverflow 上也有人问过这个问题:

Define a string in qmake command line

更多关于 Bash 的变量替换:

https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

编辑:

示例: 我刚刚尝试了一个包含以下内容的新项目文件:

SOME_OTHER_VAR=$${SOME_VAR}_something
消息($${SOME_OTHER_VAR})

做事

SOME_VAR=value
qmake qmake_variables.pro "SOME_VAR=${SOME_VAR}"

对我有用,打印:

Project MESSAGE: value_something

【讨论】:

  • 谢谢。不过,我已经在 shell 中定义/导出了 CROSS_COMPILE 变量。我只是从我的帖子中省略了那个细节。
  • 我刚刚编辑了帖子。我想先把它放在评论中,但是 cmets 的格式很糟糕。编辑:在脚本中运行 qmake 之前,您是否验证过 CROSS_COMPILE 的值确实是您想要的值?或者项目文件可能会在某个地方覆盖用户定义的 CROSS_COMPILE 值?
  • 嗯。好吧,至少它在某些时候像它应该的那样工作。我的问题一定是上下文相关的。这一切都是由脚本的多个嵌套触发的。这些层可能是问题的一部分。幸运的是,我抛出了我试图运行的进程,并且在较低级别执行时一切正常。
【解决方案2】:

这不是最佳答案,但我通过将其添加到我的 qmake.conf 中“解决了”问题:

CROSS_COMPILE=$$(CROSS_COMPILE)

通过从我在调用 bash 脚本中设置的环境变量中获取变量来定义 qmake 中的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多