2017-08-25 99 views
0

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

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

是'.qmake.conf'文件的可变部分吗?参数仅适用于pro文件,而不适用于qmake配置。可能需要通过'--spec'参数传递正确的qmake规范。检查'mkspecs'目录找到正确的目录,或创建自己的目录。这可能工作。 – Felix

+0

谢谢,菲利克斯。我会看看--spec参数。 – BuvinJ

回答

0

这是不是最好的答案,但我加入这个我qmake.conf“解决”的问题:

CROSS_COMPILE=$$(CROSS_COMPILE) 

通过从一个环境变量设置我在得到它定义在QMAKE变量我的调用bash脚本。

0

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

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

注意美元符号,其逃逸,以防止它从具有特殊意义的外壳,并使其能够得到字面上传递到qmake通过之前的反斜杠。

这个问题也已通过问#2:

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 
+0

谢谢。我已经在shell中定义/导出了CROSS_COMPILE变量。我只是从我的帖子中省略了这些细节。 – BuvinJ

+0

我刚刚编辑帖子。我想先评论一下,但评论的格式很糟糕。 编辑:你有没有证实CROSS_COMPILE的价值确实是你想要它立即在脚本中运行qmake之前? 或者,也许项目文件是这样的,一个makefile会覆盖用户定义CROSS_COMPILE值的地方? – Larry

+0

嗯。那么,至少它的工作原理应该是在某些时候。我的问题一定是上下文相关的。这一切都是由多个脚本嵌套触发的。这些层可能是问题的一部分。幸运的是,我抛出了我正在尝试运行的过程,并且在低层次上执行时一切正常。 – BuvinJ