2017-08-25 5 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'ファイルの一部ですか?パラメータはプロファイルにのみ適用され、qmake設定には適用されません。 '--spec'パラメータで正しいqmake仕様を渡す必要があるかもしれません。 'mkspecs'ディレクトリを調べて正しいものを見つけ出すか、独自のディレクトリを作成してください。これは機能するかもしれません。 – Felix

+0

ありがとう、フェリックス。私は--specパラメータを見ていきます。 – BuvinJ

答えて

0

これが最良の答えではありませんが、私は私のqmake.confにこれを追加することで、問題を「解決」:私は設定した環境変数から、それを取得することにより、qmakeの中の変数を定義し

CROSS_COMPILE=$$(CROSS_COMPILE) 

私の呼び出しbashスクリプト。

0

あなたの問題は、シェルが文字列内の$ {}を既に変数置換の形式として解釈していたことです。 シェルで変数CROSS_COMPILEを定義していないので、値はなく、qmakeが実際に引用符 "qt.pro"と "CROSS_COMPILE ="の間の2つの引数であったため、実際にqmakeをCROSS_COMPILEに設定しました空の値。 何を試してみてくださいすることです:

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

注シェルに特別な意味を持っていることから、それを防ぐためにそれをエスケープしてqmakeのために文字通りに渡さ取得することを可能にドル記号、前にバックスラッシュ。

この質問は、すでにStackOverflowの上で求められています。bashの変数置換の

Define a string in qmake command line

より:

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

EDIT:

例: 私は私はちょうど新しいプロジェクトファイルを次の内容:

SOME_OTHER_VAR = $$ {SOME_VAR}
メッセージ($$ {SOME_OTHER_VAR})

を_somethingと

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

を行うには、私のために仕事を行い、印刷:

Project MESSAGE: value_something 
+0

ありがとうございます。私はシェルでCROSS_COMPILE変数を定義/エクスポートしました。私はちょうど私のポストからその詳細を省いた。 – BuvinJ

+0

投稿を編集しました。私はまずそれをコメントに入れたいのですが、コメントのフォーマットはひどいです。 EDIT:CROSS_COMPILEの値がスクリプト内でqmakeを実行する直前の値であることを確認しましたか? または、プロジェクトファイルは、メイクファイルがどこかのCROSS_COMPILEのユーザー定義値を上書きするようなものでしょうか? – Larry

+0

Hmm。まあ、少なくともそれは時間のいくつかになっているように動作します。私の問題は文脈にとらわれているにちがいない。これはすべてスクリプトの複数のネストによって引き起こされていました。これらのレイヤーは問題の一部であった可能性があります。幸いにも、私は実行しようとしていたプロセスを投げ捨て、低レベルで実行するとすべてが機能しました。 – BuvinJ

関連する問題