Pokud potřebujeme výsledek provedení shellového příkazu do definice pak:
Buď použijte $$system()
. Toto je spuštěno při každém provádění qmake:
DEFINES += GIT_VERSION=$$system(git describe --always)
NEbo použijte $()
pokud to chcete spustit při každém BUILDu (to je při provádění makefile).
Pro DEFINES
je nutno uzavřít příkaz do apostrofů (to je první vrstva úniku), zejména obsahuje-li mezary, jinak qmake vloží nechtěné -D
:
DEFINES += GIT_VERSION='$(shell git describe --always)'
To to pak zkopíruje doslova do makefile.
Pokud výstup příkazu obsahuje mezery, je potřeba další vrstva úniku – uvozovky (tentokrát pro make):
DEFINES += BUILD_DATE='"$(shell date)"'
Potřebujete-li uvozovky kolem hodnoty, pak je to pořeba provést obdobně jako v níže uvedeném příkazu. No zrovna hezké to není.
DEFINES += BUILD_DATE='"\\\"$(shell date)\\\""'
Mnozí doporučují použít stringfy provoz preprocesoru, v tomto případě:
#define _STR(x) #x
#define STR(X) _STR(x)
printf("Toto bylo vytvoreno " STR(BUILD_DATE) "\n");