web-dev-qa-db-ja.com

値を指定してqmakeに定義を追加しますか?

Qmake WITH値を使用して定義を追加するにはどうすればよいですか:

たとえば、これは私の.proファイルでは(予想どおり)動作しません。

DEFINES += WINVER 0x0500

また

DEFINES += "WINVER 0x0500"

コンパイルが始まる前にWINVERを0x0500として定義するにはどうすればよいですか?

49
Jake Petroules

DEFINES += "WINVER=0x0500"私のために働く。

こちらです、 -DWINVER=0x0500がコンパイラーのコマンド行に追加されます。これは、GCC/mingwがコマンド行プリプロセッサー定義に期待する構文です(詳細については here を参照してください)。

67
Greg S
DEFINES += MY_DEF=\\\"String\\\"

この形式は、マクロを文字列要素に置き換える場合に使用します

45
shrikantd

補足として、単に定数を設定するのではなく、シェルコードを実行する場合(たとえば、バージョン番号または日付を取得するため):

$$system()を使用します。これはqmakeの実行時に実行:

_DEFINES += GIT_VERSION=$$system(git describe --always)
_

または、コードをビルドごとに実行(つまり、メイクファイルが実行されるとき)にする必要がある場合は、$()を使用します。 DEFINESの場合、スペースが含まれている場合はコマンドをエスケープする必要があります。そうでない場合、qmakeは不要な_-D_を挿入します。

_DEFINES += GIT_VERSION='$(Shell git describe --always)'
_

これは、文字通りmakefileにコピーされます。

コマンドの出力にスペースが含まれている場合は、エスケープメントの別のレイヤーが必要です(今回はmake):

_DEFINES += BUILD_DATE='"$(Shell date)"'
_

文字列を取得するために値を引用符で囲む必要がある場合は、少し見苦しくなります。

_DEFINES += BUILD_DATE='"\\\"$(Shell date)\\\""'
_

この場合、プリプロセッサの文字列化操作を使用することをお勧めします。

_#define _STR(x) #x
#define STRINGIFY(x)  _STR(x)

printf("this was built on " STRINGIFY(BUILD_DATE) "\n");
_
24
iliis

#define STRING "スペースを含む値" for Qt * .PRO file:

QTプロジェクトファイルから#define STRING "Value with space"を追加するには、次のように記述する必要がありました。

DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\""
DEFINES += "VERSION_QT=\"\\\"Qt 5.10\\\"\""

makefile.Releaseファイルになります:

DEFINES       = -DUNICODE -D_UNICODE -DVERSION_LOG="\"Version 2.5.1\"" -DVERSION_QT="\"Qt 5.10\"" -DQT_NO_DEBUG [...]

要約すると、その行で:DEFINES += "VERSION_LOG=\"\\\"Version 2.5.1\\\"\""

最初と最後の"は、文全体を文字列として読み取るようにQMakeに指示します

最初と最後の\"は最初と最後の" into -DVERSION_LOG="\"Version 2.5.1\""

最初と最後の\\\"\次に" into -DVERSION_LOG="\"Version 2.5.1\""

7
Pix'Config

Gregの答えは、.proファイルで問題なく機能します。ただし、コマンドラインからqmakeを呼び出すとき、スペースを残す必要がありました。つまり、sthを使用しました。次のように、定義を機能させるには:

qmake DEFINES+="WINVER 0x0500"
4
FourtyTwo

Objective-Cで使用する文字列リテラルを定義する場合は、エスケープされた引用符の前に@を覚えておく必要があります

DEFINES += MY_DEF='@\\"string-literal\\"'
0
Peter Ford