В качестве дополнения, если вы хотите выполнить шелл-код вместо простой установки константы (например, для получения номера версии или даты):
Либо используйте $$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");