Добавьте определение к qmake С значением?
Как добавить определение с помощью qmake С значением:
Например, это не работает (как я и ожидал) в моем файле .pro:
DEFINES += WINVER 0x0500
ни
DEFINES += "WINVER 0x0500"
Как определить WINVER как 0x0500, прежде чем что-либо начнет компиляцию, чтобы его определение никак не повлияло на компиляцию или включение порядка?
Ответы
Ответ 1
DEFINES += "WINVER=0x0500"
работает для меня.
Таким образом, -DWINVER=0x0500
добавляется в командную строку компилятора, который является синтаксисом GCC/mingw, ожидающим определения препроцессора командной строки (см. здесь для деталей).
Ответ 2
DEFINES += MY_DEF=\\\"String\\\"
Этот формат должен использоваться, когда предполагается, что макрос заменен строковым элементом
Ответ 3
В качестве дополнения, если вы хотите выполнить код оболочки вместо установки константы (например, для получения номера версии или даты):
Используйте $$system()
. Это выполняется при выполнении qmake:
DEFINES += GIT_VERSION=$$system(git describe --always)
Или используйте $()
, если код должен быть запущен для каждой сборки (т.е. когда make файл выполняется).
Для DEFINES
вам нужно избежать команды, если она содержит пробелы, иначе qmake вставляет нежелательные -D
's:
DEFINES += GIT_VERSION='$(shell git describe --always)'
Это будет скопировано буквально в make файл.
Если выход команды содержит пробелы, вам нужен еще один уровень спуска (на этот раз для make):
DEFINES += BUILD_DATE='"$(shell date)"'
Если вам нужна цитата вокруг вашего значения, чтобы получить строку, она становится немного уродливой:
DEFINES += BUILD_DATE='"\\\"$(shell date)\\\""'
Я бы рекомендовал использовать препроцессоры в этом случае:
#define _STR(x) #x
#define STR(X) _STR(x)
printf("this was built on " STR(BUILD_DATE) "\n");
Ответ 4
Ответ Greg отлично работает в файле .pro. Однако при вызове qmake из командной строки мне пришлось оставить пробелы, т.е. Использовать sth. как показано ниже, для выполнения задания:
qmake DEFINES+="WINVER 0x0500"