我想从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}"
还有其他一些这样的刺伤。我也尝试过对该命令中的值进行硬编码,以防万一与它有任何关系。我也尝试将其定义为环境变量(以防万一)...
没有任何作用。然而,我已经看到成堆的例子,这种语法似乎是有效的。怎么了?可能会出现角色逃避并发症吗?
答案 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