如何从命令行传递QMAKE变量?

时间:2017-08-25 14:51:46

标签: linux qt cross-compiling qmake

我想从Linux终端尝试交叉编译堆Qt。当我运行qmake时,它在我的上下文中应用mkspecs qmake.conf,以便必须定义CROSS_COMPILE变量。例如,有一个关键的配置行看起来像这样:

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}"

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

没有任何作用。然而,我已经看到成堆的例子,这种语法似乎是有效的。怎么了?可能会出现角色逃避并发症吗?

2 个答案:

答案 0 :(得分:0)

这不是最佳答案,但我已经解决了#34;将此问题添加到我的qmake.conf:

CROSS_COMPILE=$$(CROSS_COMPILE)

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

答案 1 :(得分:0)

你的问题是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