Добавить определение в qmake WITH значение? - PullRequest
48 голосов
/ 28 июля 2010

Как добавить определение с помощью qmake WITH со значением:

Например, это не работает (как я ожидал) в моем файле .pro:

DEFINES += WINVER 0x0500

ни

DEFINES += "WINVER 0x0500"

Как определить WINVER как 0x0500, прежде чем что-либо начнет компилироваться, чтобы на его определение не повлияла компиляция или порядок включения?

Ответы [ 6 ]

66 голосов
/ 28 июля 2010

DEFINES += "WINVER=0x0500" работает для меня.

Таким образом, -DWINVER=0x0500 добавляется в командную строку компилятора, что является синтаксисом, который GCC / mingw ожидает для определений препроцессора командной строки (см. здесь для деталей).

43 голосов
/ 20 августа 2013
DEFINES += MY_DEF=\\\"String\\\"

Этот формат должен использоваться, когда предполагается заменить макрос на строковый элемент

24 голосов
/ 03 июня 2014

В качестве дополнения, если вы хотите выполнить шелл-код вместо простой установки константы (например, для получения номера версии или даты):

Либо используйте $$system().Это запускается при выполнении qmake:

DEFINES += GIT_VERSION=$$system(git describe --always)

Или используйте $(), если код должен быть запускаться при каждой сборке (т.е. когда исполняется make-файл).Для DEFINES вам нужно экранировать команду, если она содержит пробелы, в противном случае qmake вставит ненужные -D:

DEFINES += GIT_VERSION='$(shell git describe --always)'

Затем она будет буквально скопирована в make-файл.

Если выходные данные команды содержат пробелы, вам нужен еще один уровень экранирования (на этот раз для make):

DEFINES += BUILD_DATE='"$(shell date)"'

Если вам нужны кавычки вокруг вашего значения, чтобы получить строку, она становится немного уродливой:

DEFINES += BUILD_DATE='"\\\"$(shell date)\\\""'

Я бы порекомендовал использовать операцию препроцессора stringify в этом случае:

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

printf("this was built on " STRINGIFY(BUILD_DATE) "\n");
6 голосов
/ 14 февраля 2018

# определить STRING "Значение с пробелами" для файла Qt * .PRO:

Чтобы добавить #, определите STRING "Значение с пробелами" изФайл проекта QT, мы должны были написать:

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 прочитать все предложение в виде строки

Первый и последний \" записывает первый и последний " в -DVERSION_LOG="\"Version 2.5.1\""

Первый и последний \\\" записывает \, затем " в -DVERSION_LOG="\"Version 2.5.1\""

4 голосов
/ 23 января 2015

Ответ Грега отлично работает в файле .pro.Однако при вызове qmake из командной строки мне пришлось оставить пробелы, то есть использовать sth.например, чтобы определить работу:

qmake DEFINES+="WINVER 0x0500"
0 голосов
/ 29 ноября 2018

Если вы хотите определить строковый литерал для использования в Objective-C, вам нужно запомнить @ перед экранированными кавычками

DEFINES += MY_DEF='@\\"string-literal\\"'
...