Qmake WITH値を使用して定義を追加するにはどうすればよいですか:
たとえば、これは私の.proファイルでは(予想どおり)動作しません。
DEFINES += WINVER 0x0500
また
DEFINES += "WINVER 0x0500"
コンパイルが始まる前にWINVERを0x0500として定義するにはどうすればよいですか?
DEFINES += "WINVER=0x0500"
私のために働く。
こちらです、 -DWINVER=0x0500
がコンパイラーのコマンド行に追加されます。これは、GCC/mingwがコマンド行プリプロセッサー定義に期待する構文です(詳細については here を参照してください)。
DEFINES += MY_DEF=\\\"String\\\"
この形式は、マクロを文字列要素に置き換える場合に使用します
補足として、単に定数を設定するのではなく、シェルコードを実行する場合(たとえば、バージョン番号または日付を取得するため):
$$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");
_
#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\""
Gregの答えは、.proファイルで問題なく機能します。ただし、コマンドラインからqmakeを呼び出すとき、スペースを残す必要がありました。つまり、sthを使用しました。次のように、定義を機能させるには:
qmake DEFINES+="WINVER 0x0500"
Objective-Cで使用する文字列リテラルを定義する場合は、エスケープされた引用符の前に@を覚えておく必要があります
DEFINES += MY_DEF='@\\"string-literal\\"'